Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_view3d/drawobject.c
| Show First 20 Lines • Show All 2,166 Lines • ▼ Show 20 Lines | static void draw_dm_vert_normals(BMEditMesh *em, Scene *scene, Object *ob, DerivedMesh *dm) | ||||
| calcDrawDMNormalScale(ob, &data); | calcDrawDMNormalScale(ob, &data); | ||||
| glBegin(GL_LINES); | glBegin(GL_LINES); | ||||
| dm->foreachMappedVert(dm, draw_dm_vert_normals__mapFunc, &data, DM_FOREACH_USE_NORMAL); | dm->foreachMappedVert(dm, draw_dm_vert_normals__mapFunc, &data, DM_FOREACH_USE_NORMAL); | ||||
| glEnd(); | glEnd(); | ||||
| } | } | ||||
| /* Draw verts with color set based on selection */ | /* Draw verts with color set based on selection */ | ||||
| static void draw_dm_verts__mapFunc(void *userData, int index, const float co[3], | static void draw_dm_verts__mapFunc(void *userData, int index, const float co[3], | ||||
| const float UNUSED(no_f[3]), const short UNUSED(no_s[3])) | const float UNUSED(no_f[3]), const short UNUSED(no_s[3])) | ||||
| { | { | ||||
| drawDMVerts_userData *data = userData; | drawDMVerts_userData *data = userData; | ||||
| BMVert *eve = BM_vert_at_index(data->bm, index); | BMVert *eve = BM_vert_at_index(data->bm, index); | ||||
| if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) && BM_elem_flag_test(eve, BM_ELEM_SELECT) == data->sel) { | if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN) && BM_elem_flag_test(eve, BM_ELEM_SELECT) == data->sel) { | ||||
| Show All 24 Lines | if (eve == data->eve_act) { | ||||
| bglVertex3fv(co); | bglVertex3fv(co); | ||||
| bglEnd(); | bglEnd(); | ||||
| glColor4ubv(data->sel ? data->th_vertex_select : data->th_vertex); | glColor4ubv(data->sel ? data->th_vertex_select : data->th_vertex); | ||||
| glPointSize(data->th_vertex_size); | glPointSize(data->th_vertex_size); | ||||
| bglBegin(GL_POINTS); | bglBegin(GL_POINTS); | ||||
| } | } | ||||
| else { | else { | ||||
| bglVertex3fv(co); | bglVertex3fv(co); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| static void draw_dm_verts(BMEditMesh *em, DerivedMesh *dm, const char sel, BMVert *eve_act, | static void draw_dm_verts(BMEditMesh *em, DerivedMesh *dm, const char sel, BMVert *eve_act, | ||||
campbellbarton: is obedit arg needed? | |||||
| RegionView3D *rv3d) | RegionView3D *rv3d) | ||||
| { | { | ||||
| drawDMVerts_userData data; | drawDMVerts_userData data; | ||||
| data.sel = sel; | data.sel = sel; | ||||
| data.eve_act = eve_act; | data.eve_act = eve_act; | ||||
| data.bm = em->bm; | data.bm = em->bm; | ||||
| /* Cache theme values */ | /* Cache theme values */ | ||||
| ▲ Show 20 Lines • Show All 90 Lines • ▼ Show 20 Lines | static void draw_dm_edges_sel_interp__setDrawInterpOptions(void *userData, int index, float t) | ||||
| unsigned char *col1 = cols[(BM_elem_flag_test(eed->v2, BM_ELEM_SELECT)) ? 2 : 1]; | unsigned char *col1 = cols[(BM_elem_flag_test(eed->v2, BM_ELEM_SELECT)) ? 2 : 1]; | ||||
| glColor4ub(col0[0] + (col1[0] - col0[0]) * t, | glColor4ub(col0[0] + (col1[0] - col0[0]) * t, | ||||
| col0[1] + (col1[1] - col0[1]) * t, | col0[1] + (col1[1] - col0[1]) * t, | ||||
| col0[2] + (col1[2] - col0[2]) * t, | col0[2] + (col1[2] - col0[2]) * t, | ||||
| col0[3] + (col1[3] - col0[3]) * t); | col0[3] + (col1[3] - col0[3]) * t); | ||||
| } | } | ||||
| static void draw_dm_edges_sel_interp(BMEditMesh *em, DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol) | static void draw_dm_edges_sel_interp(BMEditMesh *em, DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol, const bool draw_weights) | ||||
| { | { | ||||
| void *cols[3] = {em->bm, baseCol, selCol}; | void *cols[3] = {em->bm, baseCol, selCol}; | ||||
| dm->drawMappedEdgesInterp(dm, draw_dm_edges_sel_interp__setDrawOptions, draw_dm_edges_sel_interp__setDrawInterpOptions, cols); | dm->drawMappedEdgesInterp(dm, draw_dm_edges_sel_interp__setDrawOptions, draw_dm_edges_sel_interp__setDrawInterpOptions, cols, draw_weights); | ||||
| } | } | ||||
| /* Draw only seam edges */ | /* Draw only seam edges */ | ||||
| static DMDrawOption draw_dm_edges_seams__setDrawOptions(void *userData, int index) | static DMDrawOption draw_dm_edges_seams__setDrawOptions(void *userData, int index) | ||||
| { | { | ||||
| BMEdge *eed = BM_edge_at_index(userData, index); | BMEdge *eed = BM_edge_at_index(userData, index); | ||||
| if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN) && BM_elem_flag_test(eed, BM_ELEM_SEAM)) | if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN) && BM_elem_flag_test(eed, BM_ELEM_SEAM)) | ||||
| ▲ Show 20 Lines • Show All 318 Lines • ▼ Show 20 Lines | for (sel = 0; sel < 2; sel++) { | ||||
| } | } | ||||
| } | } | ||||
| if (v3d->zbuf) glDepthMask(1); | if (v3d->zbuf) glDepthMask(1); | ||||
| glPointSize(1.0); | glPointSize(1.0); | ||||
| } | } | ||||
| static void draw_em_fancy_edges(BMEditMesh *em, Scene *scene, View3D *v3d, | static void draw_em_fancy_edges(BMEditMesh *em, Scene *scene, View3D *v3d, | ||||
| Mesh *me, DerivedMesh *cageDM, short sel_only, | Mesh *me, DerivedMesh *cageDM, short sel_only, | ||||
| BMEdge *eed_act) | BMEdge *eed_act) | ||||
| { | { | ||||
| ToolSettings *ts = scene->toolsettings; | ToolSettings *ts = scene->toolsettings; | ||||
| int pass; | int pass; | ||||
| unsigned char wireCol[4], selCol[4], actCol[4]; | unsigned char wireCol[4], selCol[4], actCol[4]; | ||||
| /* since this function does transparent... */ | /* since this function does transparent... */ | ||||
| UI_GetThemeColor4ubv(TH_EDGE_SELECT, selCol); | UI_GetThemeColor4ubv(TH_EDGE_SELECT, selCol); | ||||
| Show All 23 Lines | else { | ||||
| if (!sel_only) wireCol[3] = 255; | if (!sel_only) wireCol[3] = 255; | ||||
| } | } | ||||
| if (ts->selectmode == SCE_SELECT_FACE) { | if (ts->selectmode == SCE_SELECT_FACE) { | ||||
| draw_dm_edges_sel(em, cageDM, wireCol, selCol, actCol, eed_act); | draw_dm_edges_sel(em, cageDM, wireCol, selCol, actCol, eed_act); | ||||
| } | } | ||||
| else if ((me->drawflag & ME_DRAWEDGES) || (ts->selectmode & SCE_SELECT_EDGE)) { | else if ((me->drawflag & ME_DRAWEDGES) || (ts->selectmode & SCE_SELECT_EDGE)) { | ||||
| if (cageDM->drawMappedEdgesInterp && (ts->selectmode & SCE_SELECT_VERTEX)) { | if (cageDM->drawMappedEdgesInterp && (ts->selectmode & SCE_SELECT_VERTEX)) { | ||||
| bool draw_weights = (me->drawflag & ME_DRAWEIGHT) | |||||
| && ((v3d->drawtype == OB_WIRE) || ((v3d->flag2 & V3D_OCCLUDE_WIRE) && (v3d->drawtype > OB_WIRE))); | |||||
| glShadeModel(GL_SMOOTH); | glShadeModel(GL_SMOOTH); | ||||
| draw_dm_edges_sel_interp(em, cageDM, wireCol, selCol); | draw_dm_edges_sel_interp(em, cageDM, wireCol, selCol, draw_weights); | ||||
| glShadeModel(GL_FLAT); | glShadeModel(GL_FLAT); | ||||
| } | } | ||||
| else { | else { | ||||
| draw_dm_edges_sel(em, cageDM, wireCol, selCol, actCol, eed_act); | draw_dm_edges_sel(em, cageDM, wireCol, selCol, actCol, eed_act); | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| if (!sel_only) { | if (!sel_only) { | ||||
| ▲ Show 20 Lines • Show All 5,125 Lines • Show Last 20 Lines | |||||
is obedit arg needed?