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
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2012-07-18 18:30:31 +0400
committerBastien Montagne <montagne29@wanadoo.fr>2012-07-18 18:30:31 +0400
commit45738ef8dc81d86e6f323a4a7eccc38a5f42a5a0 (patch)
tree9135603fb3ba59955ec22813086112e48902629f /source/blender/editors/space_view3d
parent1fc3f91016003fa5856bf987e7f2f8340def6c7a (diff)
Add Skin modifier's radius values to Transform panel (in 3D views).
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r--source/blender/editors/space_view3d/view3d_buttons.c90
1 files changed, 85 insertions, 5 deletions
diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c
index 6cfa828024d..c819637fd04 100644
--- a/source/blender/editors/space_view3d/view3d_buttons.c
+++ b/source/blender/editors/space_view3d/view3d_buttons.c
@@ -93,7 +93,7 @@ typedef struct {
float ob_scale[3]; /* need temp space due to linked values */
float ob_dims[3];
short link_scale;
- float ve_median[7];
+ float ve_median[9];
int curdef;
float *defweightp;
} TransformProperties;
@@ -135,13 +135,13 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
uiBlock *block = (layout) ? uiLayoutAbsoluteBlock(layout) : NULL;
MDeformVert *dvert = NULL;
TransformProperties *tfp;
- float median[7], ve_median[7];
- int tot, totw, totweight, totedge, totradius;
+ float median[9], ve_median[9];
+ int tot, totw, totweight, totedge, totradius, totskinradius;
char defstr[320];
PointerRNA radius_ptr;
- median[0] = median[1] = median[2] = median[3] = median[4] = median[5] = median[6] = 0.0;
- tot = totw = totweight = totedge = totradius = 0;
+ median[0] = median[1] = median[2] = median[3] = median[4] = median[5] = median[6] = median[7] = median[8] = 0.0;
+ tot = totw = totweight = totedge = totradius = totskinradius = 0;
defstr[0] = 0;
/* make sure we got storage */
@@ -159,9 +159,17 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) {
if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
+ MVertSkin *vs;
+
evedef = eve;
tot++;
add_v3_v3(median, eve->co);
+
+ vs = (MVertSkin *)CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_MVERT_SKIN);
+ if (vs) {
+ add_v2_v2(median + 7, vs->radius); /* Third val not used currently. */
+ totskinradius++;
+ }
}
}
@@ -304,6 +312,10 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
median[4] /= (float)totweight;
if (totradius)
median[5] /= (float)totradius;
+ if (totskinradius) {
+ median[7] /= (float)totskinradius;
+ median[8] /= (float)totskinradius;
+ }
if (v3d->flag & V3D_GLOBAL_STATS)
mul_m4_v3(ob->obmat, median);
@@ -373,6 +385,23 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
&(tfp->ve_median[5]), 0.0, 100.0, 1, 3, TIP_("Radius of curve control points"));
}
+ if (totskinradius == 1) {
+ uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Radius X:"),
+ 0, yi -= buth + but_margin, 200, buth,
+ &(tfp->ve_median[7]), 0.0, 100.0, 1, 3, TIP_("X radius used by Skin modifier"));
+ uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Radius Y:"),
+ 0, yi -= buth + but_margin, 200, buth,
+ &(tfp->ve_median[8]), 0.0, 100.0, 1, 3, TIP_("Y radius used by Skin modifier"));
+ }
+ else if (totskinradius > 1) {
+ uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Mean Radius X:"),
+ 0, yi -= buth + but_margin, 200, buth,
+ &(tfp->ve_median[7]), 0.0, 100.0, 1, 3, TIP_("Median X radius used by Skin modifier"));
+ uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Mean Radius Y:"),
+ 0, yi -= buth + but_margin, 200, buth,
+ &(tfp->ve_median[8]), 0.0, 100.0, 1, 3, TIP_("Median Y radius used by Skin modifier"));
+ }
+
if (totedge == 1) {
uiDefButF(block, NUM, B_OBJECTPANELMEDIAN, IFACE_("Crease:"),
0, yi -= buth + but_margin, 200, buth,
@@ -407,6 +436,8 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
median[4] = ve_median[4] - median[4];
median[5] = ve_median[5] - median[5];
median[6] = ve_median[6] - median[6];
+ median[7] = ve_median[7] - median[7];
+ median[8] = ve_median[8] - median[8];
if (ob->type == OB_MESH) {
Mesh *me = ob->data;
@@ -501,6 +532,55 @@ static void v3d_editvertex_buts(uiLayout *layout, View3D *v3d, Object *ob, float
}
}
}
+
+ if (median[7] != 0.0f) {
+ BMVert *eve;
+ /* That one is not clamped to [0.0, 1.0]. */
+ float sca = ve_median[7];
+ if (ve_median[7] - median[7] == 0.0f) {
+ BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) {
+ if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
+ MVertSkin *vs = (MVertSkin *)CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_MVERT_SKIN);
+ if (vs)
+ vs->radius[0] = sca;
+ }
+ }
+ }
+ else {
+ sca /= (ve_median[7] - median[7]);
+ BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) {
+ if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
+ MVertSkin *vs = (MVertSkin *)CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_MVERT_SKIN);
+ if (vs)
+ vs->radius[0] *= sca;
+ }
+ }
+ }
+ }
+ if (median[8] != 0.0f) {
+ BMVert *eve;
+ /* That one is not clamped to [0.0, 1.0]. */
+ float sca = ve_median[8];
+ if (ve_median[8] - median[8] == 0.0f) {
+ BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) {
+ if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
+ MVertSkin *vs = (MVertSkin *)CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_MVERT_SKIN);
+ if (vs)
+ vs->radius[1] = sca;
+ }
+ }
+ }
+ else {
+ sca /= (ve_median[8] - median[8]);
+ BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) {
+ if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
+ MVertSkin *vs = (MVertSkin *)CustomData_bmesh_get(&bm->vdata, eve->head.data, CD_MVERT_SKIN);
+ if (vs)
+ vs->radius[1] *= sca;
+ }
+ }
+ }
+ }
EDBM_mesh_normals_update(em);
}
else if (ELEM(ob->type, OB_CURVE, OB_SURF)) {