Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/transform/transform_snap.c
| Show First 20 Lines • Show All 188 Lines • ▼ Show 20 Lines | if (validSnap(t)) { | ||||
| } | } | ||||
| else { | else { | ||||
| immUniformColor4ubv(col); | immUniformColor4ubv(col); | ||||
| } | } | ||||
| imm_drawcircball(p->co, ED_view3d_pixel_size(rv3d, p->co) * size * 0.75f, imat, pos); | imm_drawcircball(p->co, ED_view3d_pixel_size(rv3d, p->co) * size * 0.75f, imat, pos); | ||||
| } | } | ||||
| if (t->tsnap.status & POINT_INIT) { | |||||
| immUniformColor4ubv(activeCol); | |||||
| imm_drawcircball( | |||||
| t->tsnap.snapPoint, ED_view3d_pixel_size(rv3d, t->tsnap.snapPoint) * size, imat, pos); | |||||
| } | |||||
| /* draw normal if needed */ | /* draw normal if needed */ | ||||
| if (usingSnappingNormal(t) && validSnappingNormal(t)) { | if (usingSnappingNormal(t) && validSnappingNormal(t)) { | ||||
| immUniformColor4ubv(activeCol); | immUniformColor4ubv(activeCol); | ||||
| immBegin(GPU_PRIM_LINES, 2); | immBegin(GPU_PRIM_LINES, 2); | ||||
| immVertex3f(pos, t->tsnap.snapPoint[0], t->tsnap.snapPoint[1], t->tsnap.snapPoint[2]); | immVertex3f(pos, t->tsnap.snapPoint[0], t->tsnap.snapPoint[1], t->tsnap.snapPoint[2]); | ||||
| immVertex3f(pos, | immVertex3f(pos, | ||||
| t->tsnap.snapPoint[0] + t->tsnap.snapNormal[0], | t->tsnap.snapPoint[0] + t->tsnap.snapNormal[0], | ||||
| ▲ Show 20 Lines • Show All 776 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) | static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec)) | ||||
| { | { | ||||
| if (t->spacetype == SPACE_VIEW3D) { | if (t->spacetype == SPACE_VIEW3D) { | ||||
| float loc[3]; | float loc[3]; | ||||
| float no[3]; | float no[3]; | ||||
| float mval[2]; | float mval[2]; | ||||
| short elem_type = 0; | |||||
| bool found = false; | bool found = false; | ||||
| float dist_px = SNAP_MIN_DISTANCE; // Use a user defined value here | float dist_px = SNAP_MIN_DISTANCE; // Use a user defined value here | ||||
| mval[0] = t->mval[0]; | mval[0] = t->mval[0]; | ||||
| mval[1] = t->mval[1]; | mval[1] = t->mval[1]; | ||||
| if (t->tsnap.mode & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE | | if (t->tsnap.mode & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE | | ||||
| SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) { | SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) { | ||||
| zero_v3(no); /* objects won't set this */ | zero_v3(no); /* objects won't set this */ | ||||
| found = snapObjectsTransform(t, mval, &dist_px, loc, no); | elem_type = snapObjectsTransform(t, mval, &dist_px, loc, no); | ||||
| found = elem_type != 0; | |||||
| } | } | ||||
| if ((found == false) && (t->tsnap.mode & SCE_SNAP_MODE_VOLUME)) { | if ((found == false) && (t->tsnap.mode & SCE_SNAP_MODE_VOLUME)) { | ||||
| found = peelObjectsTransform( | found = peelObjectsTransform( | ||||
| t, mval, (t->settings->snap_flag & SCE_SNAP_PEEL_OBJECT) != 0, loc, no, NULL); | t, mval, (t->settings->snap_flag & SCE_SNAP_PEEL_OBJECT) != 0, loc, no, NULL); | ||||
| if (found) { | |||||
| elem_type = SCE_SNAP_MODE_VOLUME; | |||||
| } | |||||
| } | } | ||||
| if (found == true) { | if (found == true) { | ||||
| copy_v3_v3(t->tsnap.snapPoint, loc); | copy_v3_v3(t->tsnap.snapPoint, loc); | ||||
| copy_v3_v3(t->tsnap.snapNormal, no); | copy_v3_v3(t->tsnap.snapNormal, no); | ||||
| t->tsnap.status |= POINT_INIT; | t->tsnap.status |= POINT_INIT; | ||||
| } | } | ||||
| else { | else { | ||||
| t->tsnap.status &= ~POINT_INIT; | t->tsnap.status &= ~POINT_INIT; | ||||
| } | } | ||||
| t->tsnap.elem_type = elem_type; | |||||
| } | } | ||||
| else if (t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH) { | else if (t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH) { | ||||
| if (t->tsnap.mode & SCE_SNAP_MODE_VERTEX) { | if (t->tsnap.mode & SCE_SNAP_MODE_VERTEX) { | ||||
| Image *ima = ED_space_image(t->sa->spacedata.first); | Image *ima = ED_space_image(t->sa->spacedata.first); | ||||
| float co[2]; | float co[2]; | ||||
| UI_view2d_region_to_view(&t->ar->v2d, t->mval[0], t->mval[1], &co[0], &co[1]); | UI_view2d_region_to_view(&t->ar->v2d, t->mval[0], t->mval[1], &co[0], &co[1]); | ||||
| ▲ Show 20 Lines • Show All 227 Lines • ▼ Show 20 Lines | if (t->tsnap.status & POINT_INIT) { | ||||
| } | } | ||||
| TargetSnapOffset(t, closest); | TargetSnapOffset(t, closest); | ||||
| t->tsnap.status |= TARGET_INIT; | t->tsnap.status |= TARGET_INIT; | ||||
| } | } | ||||
| } | } | ||||
| bool snapObjectsTransform( | short snapObjectsTransform( | ||||
| TransInfo *t, const float mval[2], float *dist_px, float r_loc[3], float r_no[3]) | TransInfo *t, const float mval[2], float *dist_px, float r_loc[3], float r_no[3]) | ||||
| { | { | ||||
| return ED_transform_snap_object_project_view3d( | return ED_transform_snap_object_project_view3d_ex( | ||||
| t->tsnap.object_context, | t->tsnap.object_context, | ||||
| t->scene->toolsettings->snap_mode, | t->scene->toolsettings->snap_mode, | ||||
| &(const struct SnapObjectParams){ | &(const struct SnapObjectParams){ | ||||
| .snap_select = t->tsnap.modeSelect, | .snap_select = t->tsnap.modeSelect, | ||||
| .use_object_edit_cage = (t->flag & T_EDIT) != 0, | .use_object_edit_cage = (t->flag & T_EDIT) != 0, | ||||
| .use_occlusion_test = t->scene->toolsettings->snap_mode != SCE_SNAP_MODE_FACE, | .use_occlusion_test = t->scene->toolsettings->snap_mode != SCE_SNAP_MODE_FACE, | ||||
| }, | }, | ||||
| mval, | mval, | ||||
| t->center_global, | t->center_global, | ||||
| dist_px, | dist_px, | ||||
| r_loc, | r_loc, | ||||
| r_no); | r_no, | ||||
| NULL, | |||||
| NULL, | |||||
| NULL); | |||||
| } | } | ||||
| /******************** PEELING *********************************/ | /******************** PEELING *********************************/ | ||||
| bool peelObjectsSnapContext(SnapObjectContext *sctx, | bool peelObjectsSnapContext(SnapObjectContext *sctx, | ||||
| const float mval[2], | const float mval[2], | ||||
| const struct SnapObjectParams *params, | const struct SnapObjectParams *params, | ||||
| const bool use_peel_object, | const bool use_peel_object, | ||||
| ▲ Show 20 Lines • Show All 363 Lines • Show Last 20 Lines | |||||