Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/transform/transform_snap_object.c
| Show First 20 Lines • Show All 138 Lines • ▼ Show 20 Lines | |||||
| }; | }; | ||||
| /** \} */ | /** \} */ | ||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /** \name Utilities | /** \name Utilities | ||||
| * \{ */ | * \{ */ | ||||
| static bool editmesh_eval_final_is_bmesh(const BMEditMesh *em) | static bool editmesh_eval_final_is_bmesh(const Mesh *me) | ||||
| { | { | ||||
| return (em->mesh_eval_final->runtime.wrapper_type == ME_WRAPPER_TYPE_BMESH); | const EditMeshData *emd = me->runtime.edit_data; | ||||
| return (emd && emd->eval.mesh_eval_final && | |||||
| (emd->eval.mesh_eval_final->runtime.wrapper_type == ME_WRAPPER_TYPE_BMESH)); | |||||
| } | } | ||||
| /** \} */ | /** \} */ | ||||
| /* -------------------------------------------------------------------- */ | /* -------------------------------------------------------------------- */ | ||||
| /** \name Snap Object Data | /** \name Snap Object Data | ||||
| * \{ */ | * \{ */ | ||||
| ▲ Show 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | if (init) { | ||||
| sod->has_loose_vert = true; | sod->has_loose_vert = true; | ||||
| } | } | ||||
| return sod; | return sod; | ||||
| } | } | ||||
| static struct Mesh_Runtime *snap_object_data_editmesh_runtime_get(Object *ob) | static struct Mesh_Runtime *snap_object_data_editmesh_runtime_get(Object *ob) | ||||
| { | { | ||||
| BMEditMesh *em = BKE_editmesh_from_object(ob); | Mesh *me = ob->data; | ||||
| if (em->mesh_eval_final) { | const EditMeshData *emd = me->runtime.edit_data; | ||||
| return &em->mesh_eval_final->runtime; | if (emd) { | ||||
| if (emd->eval.mesh_eval_final) { | |||||
| return &emd->eval.mesh_eval_final->runtime; | |||||
| } | |||||
| if (emd->eval.mesh_eval_cage) { | |||||
| return &emd->eval.mesh_eval_cage->runtime; | |||||
| } | } | ||||
| if (em->mesh_eval_cage) { | |||||
| return &em->mesh_eval_cage->runtime; | |||||
| } | } | ||||
| return &((Mesh *)ob->data)->runtime; | return &((Mesh *)ob->data)->runtime; | ||||
| } | } | ||||
| static SnapObjectData *snap_object_data_editmesh_get(SnapObjectContext *sctx, | static SnapObjectData *snap_object_data_editmesh_get(SnapObjectContext *sctx, | ||||
| Object *ob, | Object *ob, | ||||
| BMEditMesh *em) | BMEditMesh *em) | ||||
| { | { | ||||
| SnapObjectData *sod; | SnapObjectData *sod; | ||||
| ▲ Show 20 Lines • Show All 718 Lines • ▼ Show 20 Lines | if (use_occlusion_test) { | ||||
| } | } | ||||
| } | } | ||||
| switch (ob->type) { | switch (ob->type) { | ||||
| case OB_MESH: { | case OB_MESH: { | ||||
| Mesh *me = ob->data; | Mesh *me = ob->data; | ||||
| bool use_hide = false; | bool use_hide = false; | ||||
| if (BKE_object_is_in_editmode(ob)) { | if (BKE_object_is_in_editmode(ob)) { | ||||
| if (use_obedit || editmesh_eval_final_is_bmesh(me->edit_mesh)) { | if (use_obedit || editmesh_eval_final_is_bmesh(me)) { | ||||
| /* Operators only update the editmesh looptris of the original mesh. */ | /* Operators only update the editmesh looptris of the original mesh. */ | ||||
| BMEditMesh *em_orig = BKE_editmesh_from_object(DEG_get_original_object(ob)); | BMEditMesh *em_orig = BKE_editmesh_from_object(DEG_get_original_object(ob)); | ||||
| retval = raycastEditMesh(sctx, | retval = raycastEditMesh(sctx, | ||||
| dt->ray_start, | dt->ray_start, | ||||
| dt->ray_dir, | dt->ray_dir, | ||||
| ob, | ob, | ||||
| em_orig, | em_orig, | ||||
| obmat, | obmat, | ||||
| ob_index, | ob_index, | ||||
| use_backface_culling, | use_backface_culling, | ||||
| ray_depth, | ray_depth, | ||||
| dt->r_loc, | dt->r_loc, | ||||
| dt->r_no, | dt->r_no, | ||||
| dt->r_index, | dt->r_index, | ||||
| dt->r_hit_list); | dt->r_hit_list); | ||||
| break; | break; | ||||
| } | } | ||||
| BMEditMesh *em = BKE_editmesh_from_object(ob); | EditMeshData *emd = me->runtime.edit_data; | ||||
| if (em->mesh_eval_final) { | if (emd->eval.mesh_eval_final) { | ||||
| me = em->mesh_eval_final; | me = emd->eval.mesh_eval_final; | ||||
| use_hide = true; | use_hide = true; | ||||
| } | } | ||||
| } | } | ||||
| retval = raycastMesh(sctx, | retval = raycastMesh(sctx, | ||||
| dt->ray_start, | dt->ray_start, | ||||
| dt->ray_dir, | dt->ray_dir, | ||||
| ob, | ob, | ||||
| me, | me, | ||||
| ▲ Show 20 Lines • Show All 1,641 Lines • ▼ Show 20 Lines | |||||
| { | { | ||||
| struct SnapObjUserData *dt = data; | struct SnapObjUserData *dt = data; | ||||
| short retval = 0; | short retval = 0; | ||||
| switch (ob->type) { | switch (ob->type) { | ||||
| case OB_MESH: { | case OB_MESH: { | ||||
| Mesh *me = ob->data; | Mesh *me = ob->data; | ||||
| if (BKE_object_is_in_editmode(ob)) { | if (BKE_object_is_in_editmode(ob)) { | ||||
| if (use_obedit || editmesh_eval_final_is_bmesh(me->edit_mesh)) { | if (use_obedit || editmesh_eval_final_is_bmesh(me)) { | ||||
| /* Operators only update the editmesh looptris of the original mesh. */ | /* Operators only update the editmesh looptris of the original mesh. */ | ||||
| BMEditMesh *em_orig = BKE_editmesh_from_object(DEG_get_original_object(ob)); | BMEditMesh *em_orig = BKE_editmesh_from_object(DEG_get_original_object(ob)); | ||||
| retval = snapEditMesh(sctx, | retval = snapEditMesh(sctx, | ||||
| dt->snapdata, | dt->snapdata, | ||||
| ob, | ob, | ||||
| em_orig, | em_orig, | ||||
| obmat, | obmat, | ||||
| use_backface_culling, | use_backface_culling, | ||||
| dt->dist_px, | dt->dist_px, | ||||
| dt->r_loc, | dt->r_loc, | ||||
| dt->r_no, | dt->r_no, | ||||
| dt->r_index); | dt->r_index); | ||||
| break; | break; | ||||
| } | } | ||||
| BMEditMesh *em = BKE_editmesh_from_object(ob); | EditMeshData *emd = me->runtime.edit_data; | ||||
| if (em->mesh_eval_final) { | if (emd->eval.mesh_eval_final) { | ||||
| me = em->mesh_eval_final; | me = emd->eval.mesh_eval_final; | ||||
| } | } | ||||
| } | } | ||||
| else if (ob->dt == OB_BOUNDBOX) { | else if (ob->dt == OB_BOUNDBOX) { | ||||
| /* Do not snap to objects that are in bounding box display mode */ | /* Do not snap to objects that are in bounding box display mode */ | ||||
| return; | return; | ||||
| } | } | ||||
| retval = snapMesh(sctx, | retval = snapMesh(sctx, | ||||
| ▲ Show 20 Lines • Show All 576 Lines • Show Last 20 Lines | |||||