Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/blender/editors/space_view3d/drawmesh.c35
-rw-r--r--source/blender/editors/space_view3d/drawobject.c78
2 files changed, 84 insertions, 29 deletions
diff --git a/source/blender/editors/space_view3d/drawmesh.c b/source/blender/editors/space_view3d/drawmesh.c
index 6dd362b827f..e0b1741b0d0 100644
--- a/source/blender/editors/space_view3d/drawmesh.c
+++ b/source/blender/editors/space_view3d/drawmesh.c
@@ -70,6 +70,25 @@
#include "view3d_intern.h" // own include
+/* user data structures for derived mesh callbacks */
+typedef struct drawMeshFaceSelect_userData {
+ Mesh *me;
+ EdgeHash *eh;
+} drawMeshFaceSelect_userData;
+
+typedef struct drawEMTFMapped_userData {
+ EditMesh *em;
+ short has_mcol;
+ short has_mtface;
+ MFace *mf;
+ MTFace *tf;
+} drawEMTFMapped_userData;
+
+typedef struct drawTFace_userData {
+ MFace *mf;
+ MTFace *tf;
+} drawTFace_userData;
+
/**************************** Face Select Mode *******************************/
/* Flags for marked edges */
@@ -121,7 +140,7 @@ static EdgeHash *get_tface_mesh_marked_edge_info(Mesh *me)
static int draw_mesh_face_select__setHiddenOpts(void *userData, int index)
{
- struct { Mesh *me; EdgeHash *eh; } *data = userData;
+ drawMeshFaceSelect_userData *data = userData;
Mesh *me= data->me;
MEdge *med = &me->medge[index];
uintptr_t flags = (intptr_t) BLI_edgehash_lookup(data->eh, med->v1, med->v2);
@@ -138,7 +157,7 @@ static int draw_mesh_face_select__setHiddenOpts(void *userData, int index)
static int draw_mesh_face_select__setSelectOpts(void *userData, int index)
{
- struct { Mesh *me; EdgeHash *eh; } *data = userData;
+ drawMeshFaceSelect_userData *data = userData;
MEdge *med = &data->me->medge[index];
uintptr_t flags = (intptr_t) BLI_edgehash_lookup(data->eh, med->v1, med->v2);
@@ -159,7 +178,7 @@ static int draw_mesh_face_select__drawFaceOptsInv(void *userData, int index)
static void draw_mesh_face_select(RegionView3D *rv3d, Mesh *me, DerivedMesh *dm)
{
- struct { Mesh *me; EdgeHash *eh; } data;
+ drawMeshFaceSelect_userData data;
data.me = me;
data.eh = get_tface_mesh_marked_edge_info(me);
@@ -513,7 +532,7 @@ static int draw_tface_mapped__set_draw(void *userData, int index)
static int draw_em_tf_mapped__set_draw(void *userData, int index)
{
- struct {EditMesh *em; short has_mcol; short has_mtface; MFace *mf; MTFace *tf;} *data = userData;
+ drawEMTFMapped_userData *data = userData;
EditMesh *em = data->em;
EditFace *efa= EM_get_face_for_index(index);
MTFace *tface;
@@ -631,7 +650,7 @@ static void draw_mesh_text(Scene *scene, Object *ob, int glsl)
static int compareDrawOptions(void *userData, int cur_index, int next_index)
{
- struct { MFace *mf; MTFace *tf; } *data = userData;
+ drawTFace_userData *data = userData;
if(data->mf && data->mf[cur_index].mat_nr != data->mf[next_index].mat_nr)
return 0;
@@ -644,7 +663,7 @@ static int compareDrawOptions(void *userData, int cur_index, int next_index)
static int compareDrawOptionsEm(void *userData, int cur_index, int next_index)
{
- struct {EditMesh *em; short has_mcol; short has_mtface; MFace *mf; MTFace *tf;} *data= userData;
+ drawEMTFMapped_userData *data= userData;
if(data->mf && data->mf[cur_index].mat_nr != data->mf[next_index].mat_nr)
return 0;
@@ -669,7 +688,7 @@ void draw_mesh_textured_old(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec
glColor4f(1.0f,1.0f,1.0f,1.0f);
if(ob->mode & OB_MODE_EDIT) {
- struct {EditMesh *em; short has_mcol; short has_mtface; MFace *mf; MTFace *tf;} data;
+ drawEMTFMapped_userData data;
data.em= me->edit_mesh;
data.has_mcol= CustomData_has_layer(&me->edit_mesh->fdata, CD_MCOL);
@@ -693,7 +712,7 @@ void draw_mesh_textured_old(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec
dm->drawFacesTex(dm, draw_tface__set_draw_legacy, NULL, NULL);
}
else {
- struct { MFace *mf; MTFace *tf; } userData;
+ drawTFace_userData userData;
if(!CustomData_has_layer(&dm->faceData,CD_TEXTURE_MCOL))
add_tface_color_layer(dm);
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 273336b78f1..3199c00a32a 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -118,6 +118,48 @@ typedef enum eWireDrawMode {
OBDRAW_WIRE_ON_DEPTH= 2
} eWireDrawMode;
+/* user data structures for derived mesh callbacks */
+typedef struct foreachScreenVert_userData {
+ void (*func)(void *userData, EditVert *eve, int x, int y, int index);
+ void *userData;
+ ViewContext vc;
+ eV3DClipTest clipVerts;
+} foreachScreenVert_userData;
+
+typedef struct foreachScreenEdge_userData {
+ void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index);
+ void *userData;
+ ViewContext vc;
+ eV3DClipTest clipVerts;
+} foreachScreenEdge_userData;
+
+typedef struct foreachScreenFace_userData {
+ void (*func)(void *userData, EditFace *efa, int x, int y, int index);
+ void *userData;
+ ViewContext vc;
+} foreachScreenFace_userData;
+
+typedef struct drawDMVerts_userData {
+ int sel;
+ EditVert *eve_act;
+} drawDMVerts_userData;
+
+typedef struct drawDMEdgesSel_userData {
+ unsigned char *baseCol, *selCol, *actCol;
+ EditEdge *eed_act;
+} drawDMEdgesSel_userData;
+
+typedef struct drawDMFacesSel_userData {
+ unsigned char *cols[3];
+ EditFace *efa_act;
+ int *orig_index;
+} drawDMFacesSel_userData;
+
+typedef struct bbsObmodeMeshVerts_userData {
+ void *offset;
+ MVert *mvert;
+} bbsObmodeMeshVerts_userData;
+
static void draw_bounding_volume(Scene *scene, Object *ob, char type);
static void drawcube_size(float size);
@@ -1914,9 +1956,7 @@ static void drawlattice(Scene *scene, View3D *v3d, Object *ob)
* use the object matrix in the useual way */
static void mesh_foreachScreenVert__mapFunc(void *userData, int index, float *co, float *UNUSED(no_f), short *UNUSED(no_s))
{
- struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index);
- void *userData; ViewContext vc; eV3DClipTest clipVerts; } *data = userData;
-
+ foreachScreenVert_userData *data = userData;
EditVert *eve = EM_get_vert_for_index(index);
if (eve->h==0) {
@@ -1938,9 +1978,7 @@ void mesh_foreachScreenVert(
void (*func)(void *userData, EditVert *eve, int x, int y, int index),
void *userData, eV3DClipTest clipVerts)
{
- struct { void (*func)(void *userData, EditVert *eve, int x, int y, int index);
- void *userData; ViewContext vc; eV3DClipTest clipVerts; } data;
-
+ foreachScreenVert_userData data;
DerivedMesh *dm = editmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
data.vc= *vc;
@@ -1994,8 +2032,7 @@ static int is_co_in_region(ARegion *ar, const short co[2])
}
static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, float *v0co, float *v1co)
{
- struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index);
- void *userData; ViewContext vc; eV3DClipTest clipVerts; } *data = userData;
+ foreachScreenEdge_userData *data = userData;
EditEdge *eed = EM_get_edge_for_index(index);
short s[2][2];
@@ -2026,8 +2063,7 @@ void mesh_foreachScreenEdge(
void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index),
void *userData, eV3DClipTest clipVerts)
{
- struct { void (*func)(void *userData, EditEdge *eed, int x0, int y0, int x1, int y1, int index);
- void *userData; ViewContext vc; eV3DClipTest clipVerts; } data;
+ foreachScreenEdge_userData data;
DerivedMesh *dm = editmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
data.vc= *vc;
@@ -2047,7 +2083,7 @@ void mesh_foreachScreenEdge(
static void mesh_foreachScreenFace__mapFunc(void *userData, int index, float *cent, float *UNUSED(no))
{
- struct { void (*func)(void *userData, EditFace *efa, int x, int y, int index); void *userData; ViewContext vc; } *data = userData;
+ foreachScreenFace_userData *data = userData;
EditFace *efa = EM_get_face_for_index(index);
short s[2];
@@ -2065,7 +2101,7 @@ void mesh_foreachScreenFace(
void (*func)(void *userData, EditFace *efa, int x, int y, int index),
void *userData)
{
- struct { void (*func)(void *userData, EditFace *efa, int x, int y, int index); void *userData; ViewContext vc; } data;
+ foreachScreenFace_userData data;
DerivedMesh *dm = editmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
data.vc= *vc;
@@ -2210,7 +2246,7 @@ static void draw_dm_vert_normals(Scene *scene, DerivedMesh *dm)
/* Draw verts with color set based on selection */
static void draw_dm_verts__mapFunc(void *userData, int index, float *co, float *UNUSED(no_f), short *UNUSED(no_s))
{
- struct { int sel; EditVert *eve_act; } * data = userData;
+ drawDMVerts_userData * data = userData;
EditVert *eve = EM_get_vert_for_index(index);
if (eve->h==0 && (eve->f&SELECT)==data->sel) {
@@ -2237,7 +2273,7 @@ static void draw_dm_verts__mapFunc(void *userData, int index, float *co, float *
static void draw_dm_verts(DerivedMesh *dm, int sel, EditVert *eve_act)
{
- struct { int sel; EditVert *eve_act; } data;
+ drawDMVerts_userData data;
data.sel = sel;
data.eve_act = eve_act;
@@ -2251,7 +2287,7 @@ static int draw_dm_edges_sel__setDrawOptions(void *userData, int index)
{
EditEdge *eed = EM_get_edge_for_index(index);
//unsigned char **cols = userData, *col;
- struct { unsigned char *baseCol, *selCol, *actCol; EditEdge *eed_act; } * data = userData;
+ drawDMEdgesSel_userData * data = userData;
unsigned char *col;
if (eed->h==0) {
@@ -2275,7 +2311,7 @@ static int draw_dm_edges_sel__setDrawOptions(void *userData, int index)
}
static void draw_dm_edges_sel(DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol, unsigned char *actCol, EditEdge *eed_act)
{
- struct { unsigned char *baseCol, *selCol, *actCol; EditEdge *eed_act; } data;
+ drawDMEdgesSel_userData data;
data.baseCol = baseCol;
data.selCol = selCol;
@@ -2349,7 +2385,7 @@ static void draw_dm_edges_sharp(DerivedMesh *dm)
* return 2 for the active face so it renders with stipple enabled */
static int draw_dm_faces_sel__setDrawOptions(void *userData, int index, int *UNUSED(drawSmooth_r))
{
- struct { unsigned char *cols[3]; EditFace *efa_act; int *orig_index; } * data = userData;
+ drawDMFacesSel_userData * data = userData;
EditFace *efa = EM_get_face_for_index(index);
unsigned char *col;
@@ -2369,7 +2405,7 @@ static int draw_dm_faces_sel__setDrawOptions(void *userData, int index, int *UNU
static int draw_dm_faces_sel__compareDrawOptions(void *userData, int index, int next_index)
{
- struct { unsigned char *cols[3]; EditFace *efa_act; int *orig_index; } *data = userData;
+ drawDMFacesSel_userData *data = userData;
EditFace *efa;
EditFace *next_efa;
unsigned char *col, *next_col;
@@ -2398,7 +2434,7 @@ static int draw_dm_faces_sel__compareDrawOptions(void *userData, int index, int
/* also draws the active face */
static void draw_dm_faces_sel(DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol, unsigned char *actCol, EditFace *efa_act)
{
- struct { unsigned char *cols[3]; EditFace *efa_act; int *orig_index; } data;
+ drawDMFacesSel_userData data;
data.cols[0] = baseCol;
data.cols[1] = selCol;
data.cols[2] = actCol;
@@ -6822,7 +6858,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
static void bbs_obmode_mesh_verts__mapFunc(void *userData, int index, float *co, float *UNUSED(no_f), short *UNUSED(no_s))
{
- struct {void* offset; MVert *mvert;} *data = userData;
+ bbsObmodeMeshVerts_userData *data = userData;
MVert *mv = &data->mvert[index];
int offset = (intptr_t) data->offset;
@@ -6834,7 +6870,7 @@ static void bbs_obmode_mesh_verts__mapFunc(void *userData, int index, float *co,
static void bbs_obmode_mesh_verts(Object *ob, DerivedMesh *dm, int offset)
{
- struct {void* offset; struct MVert *mvert;} data;
+ bbsObmodeMeshVerts_userData data;
Mesh *me = ob->data;
MVert *mvert = me->mvert;
data.mvert = mvert;