[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46892] trunk/blender/source/blender: Draw skin vertex roots in edit mode.
Nicholas Bishop
nicholasbishop at gmail.com
Tue May 22 17:29:27 CEST 2012
Revision: 46892
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46892
Author: nicholasbishop
Date: 2012-05-22 15:29:27 +0000 (Tue, 22 May 2012)
Log Message:
-----------
Draw skin vertex roots in edit mode.
Roots are drawn with a view-oriented dashed red circle around the
vertex location. The circle's radius is the average if the skin
vertex's X and Y radii.
Skin modifier documentation:
http://wiki.blender.org/index.php/User:Nicholasbishop/SkinModifier
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/customdata.c
trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c
trunk/blender/source/blender/editors/space_view3d/drawobject.c
trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
Modified: trunk/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/customdata.c 2012-05-22 15:29:15 UTC (rev 46891)
+++ trunk/blender/source/blender/blenkernel/intern/customdata.c 2012-05-22 15:29:27 UTC (rev 46892)
@@ -1161,7 +1161,7 @@
CD_MASK_MLOOPCOL | CD_MASK_MTEXPOLY | CD_MASK_SHAPE_KEYINDEX |
CD_MASK_MCOL | CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_PROP_STR |
CD_MASK_MDISPS | CD_MASK_SHAPEKEY | CD_MASK_RECAST | CD_MASK_PAINT_MASK |
- CD_MASK_GRID_PAINT_MASK;
+ CD_MASK_GRID_PAINT_MASK | CD_MASK_MVERT_SKIN;
const CustomDataMask CD_MASK_DERIVEDMESH =
CD_MASK_MSTICKY | CD_MASK_MDEFORMVERT | CD_MASK_MTFACE |
CD_MASK_MCOL | CD_MASK_PROP_FLT | CD_MASK_PROP_INT | CD_MASK_CLOTH_ORCO |
Modified: trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c 2012-05-22 15:29:15 UTC (rev 46891)
+++ trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c 2012-05-22 15:29:27 UTC (rev 46892)
@@ -1688,6 +1688,20 @@
}
}
+ if (CustomData_has_layer(&bm->vdata, CD_MVERT_SKIN)) {
+ BMIter iter;
+ BMVert *eve;
+ int i;
+
+ DM_add_vert_layer(&bmdm->dm, CD_MVERT_SKIN, CD_CALLOC, NULL);
+
+ BM_ITER_MESH_INDEX (eve, &iter, bmdm->tc->bm, BM_VERTS_OF_MESH, i) {
+ DM_set_vert_data(&bmdm->dm, i, CD_MVERT_SKIN,
+ CustomData_bmesh_get(&bm->vdata, eve->head.data,
+ CD_MVERT_SKIN));
+ }
+ }
+
if (vertexCos) {
BMFace *efa;
BMVert *eve;
Modified: trunk/blender/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/drawobject.c 2012-05-22 15:29:15 UTC (rev 46891)
+++ trunk/blender/source/blender/editors/space_view3d/drawobject.c 2012-05-22 15:29:27 UTC (rev 46892)
@@ -143,6 +143,17 @@
int sel;
BMVert *eve_act;
+
+ /* cached theme values */
+ unsigned char th_editmesh_active[4];
+ unsigned char th_vertex_select[4];
+ unsigned char th_vertex[4];
+ unsigned char th_skin_root[4];
+ float th_vertex_size;
+
+ /* for skin node drawing */
+ int has_vskin;
+ float imat[4][4];
} drawDMVerts_userData;
typedef struct drawDMEdgesSel_userData {
@@ -2400,20 +2411,37 @@
BMVert *eve = EDBM_vert_at_index(data->em, index);
if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) && BM_elem_flag_test(eve, BM_ELEM_SELECT) == data->sel) {
+ /* skin nodes: draw a red circle around the root
+ node(s) */
+ if(data->has_vskin) {
+ const MVertSkin *vs = CustomData_bmesh_get(&data->em->bm->vdata,
+ eve->head.data,
+ CD_MVERT_SKIN);
+ if (vs->flag & MVERT_SKIN_ROOT) {
+ float radius = (vs->radius[0] + vs->radius[1]) * 0.5f;
+ bglEnd();
+
+ glColor4ubv(data->th_skin_root);
+ drawcircball(GL_LINES, co, radius, data->imat);
+
+ glColor4ubv(data->sel ? data->th_vertex_select : data->th_vertex);
+ bglBegin(GL_POINTS);
+ }
+ }
+
/* draw active larger - need to stop/start point drawing for this :/ */
if (eve == data->eve_act) {
- float size = UI_GetThemeValuef(TH_VERTEX_SIZE);
- UI_ThemeColor4(TH_EDITMESH_ACTIVE);
+ glColor4ubv(data->th_editmesh_active);
bglEnd();
- glPointSize(size);
+ glPointSize(data->th_vertex_size);
bglBegin(GL_POINTS);
bglVertex3fv(co);
bglEnd();
-
- UI_ThemeColor4(data->sel ? TH_VERTEX_SELECT : TH_VERTEX);
- glPointSize(size);
+
+ glColor4ubv(data->sel ? data->th_vertex_select : data->th_vertex);
+ glPointSize(data->th_vertex_size);
bglBegin(GL_POINTS);
}
else {
@@ -2422,13 +2450,27 @@
}
}
-static void draw_dm_verts(BMEditMesh *em, DerivedMesh *dm, int sel, BMVert *eve_act)
+static void draw_dm_verts(BMEditMesh *em, DerivedMesh *dm, int sel, BMVert *eve_act,
+ RegionView3D *rv3d)
{
drawDMVerts_userData data;
data.sel = sel;
data.eve_act = eve_act;
data.em = em;
+ /* Cache theme values */
+ UI_GetThemeColor4ubv(TH_EDITMESH_ACTIVE, data.th_editmesh_active);
+ UI_GetThemeColor4ubv(TH_VERTEX_SELECT, data.th_vertex_select);
+ UI_GetThemeColor4ubv(TH_VERTEX, data.th_vertex);
+ UI_GetThemeColor4ubv(TH_SKIN_ROOT, data.th_skin_root);
+ data.th_vertex_size = UI_GetThemeValuef(TH_VERTEX_SIZE);
+
+ /* For skin root drawing */
+ data.has_vskin = CustomData_has_layer(&em->bm->vdata, CD_MVERT_SKIN);
+ /* view-aligned matrix */
+ mult_m4_m4m4(data.imat, rv3d->viewmat, em->ob->obmat);
+ invert_m4(data.imat);
+
bglBegin(GL_POINTS);
dm->foreachMappedVert(dm, draw_dm_verts__mapFunc, &data);
bglEnd();
@@ -2711,7 +2753,8 @@
/* EditMesh drawing routines*/
static void draw_em_fancy_verts(Scene *scene, View3D *v3d, Object *obedit,
- BMEditMesh *em, DerivedMesh *cageDM, BMVert *eve_act)
+ BMEditMesh *em, DerivedMesh *cageDM, BMVert *eve_act,
+ RegionView3D *rv3d)
{
ToolSettings *ts = scene->toolsettings;
int sel;
@@ -2750,7 +2793,7 @@
if (ts->selectmode & SCE_SELECT_VERTEX) {
glPointSize(size);
glColor4ubv(col);
- draw_dm_verts(em, cageDM, sel, eve_act);
+ draw_dm_verts(em, cageDM, sel, eve_act, rv3d);
}
if (check_ob_drawface_dot(scene, v3d, obedit->dt)) {
@@ -3228,7 +3271,7 @@
draw_em_fancy_edges(em, scene, v3d, me, cageDM, 0, eed_act);
}
if (em) {
- draw_em_fancy_verts(scene, v3d, ob, em, cageDM, eve_act);
+ draw_em_fancy_verts(scene, v3d, ob, em, cageDM, eve_act, rv3d);
if (me->drawflag & ME_DRAWNORMALS) {
UI_ThemeColor(TH_NORMAL);
Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c 2012-05-22 15:29:15 UTC (rev 46891)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c 2012-05-22 15:29:27 UTC (rev 46892)
@@ -2335,6 +2335,9 @@
if (ob->mode & OB_MODE_WEIGHT_PAINT) {
mask |= CD_MASK_PREVIEW_MCOL;
}
+
+ if (ob->mode & OB_MODE_EDIT)
+ mask |= CD_MASK_MVERT_SKIN;
}
return mask;
More information about the Bf-blender-cvs
mailing list