|
Blender V4.3
|
#include <fmt/format.h>#include "MEM_guardedalloc.h"#include "BLF_api.hh"#include "BLI_alloca.h"#include "BLI_linklist.h"#include "BLI_listbase.h"#include "BLI_map.hh"#include "BLI_math_color.h"#include "BLI_math_matrix.h"#include "BLI_math_rotation.h"#include "BLI_math_vector_types.hh"#include "BLI_memarena.h"#include "BLI_set.hh"#include "BLI_stack.h"#include "BLI_string.h"#include "BLI_vector.hh"#include "BLT_translation.hh"#include "BKE_bvhutils.hh"#include "BKE_context.hh"#include "BKE_editmesh.hh"#include "BKE_layer.hh"#include "BKE_report.hh"#include "BKE_scene.hh"#include "BKE_unit.hh"#include "GPU_immediate.hh"#include "GPU_matrix.hh"#include "GPU_state.hh"#include "ED_mesh.hh"#include "ED_numinput.hh"#include "ED_screen.hh"#include "ED_space_api.hh"#include "ED_transform.hh"#include "ED_view3d.hh"#include "WM_api.hh"#include "WM_types.hh"#include "DNA_object_types.h"#include "UI_interface.hh"#include "UI_resources.hh"#include "RNA_access.hh"#include "RNA_define.hh"#include "DEG_depsgraph.hh"#include "DEG_depsgraph_query.hh"#include "mesh_intern.hh"Go to the source code of this file.
Classes | |
| struct | KnifeColors |
| struct | KnifeVert |
| struct | KnifeEdge |
| struct | KnifeLineHit |
| struct | KnifePosData |
| struct | KnifeMeasureData |
| struct | KnifeUndoFrame |
| struct | KnifeBVH |
| struct | KnifeObjectInfo |
| struct | KnifeTool_OpData |
Macros | |
| #define | USE_NET_ISLAND_CONNECT |
| #define | KMAXDIST (10 * UI_SCALE_FAC) /* Max mouse distance from edge before not detecting it. */ |
| #define | KNIFE_FLT_EPS 0.00001f |
| #define | KNIFE_FLT_EPS_SQUARED (KNIFE_FLT_EPS * KNIFE_FLT_EPS) |
| #define | KNIFE_FLT_EPSBIG 0.0005f |
| #define | KNIFE_FLT_EPS_PX_VERT 0.5f |
| #define | KNIFE_FLT_EPS_PX_EDGE 0.05f |
| #define | KNIFE_FLT_EPS_PX_FACE 0.05f |
| #define | KNIFE_DEFAULT_ANGLE_SNAPPING_INCREMENT 30.0f |
| #define | KNIFE_MIN_ANGLE_SNAPPING_INCREMENT 0.0f |
| #define | KNIFE_MAX_ANGLE_SNAPPING_INCREMENT 180.0f |
| #define | F_ISECT_IS_UNKNOWN(f) BM_elem_flag_test(BM_FACE_FIRST_LOOP(f), BM_ELEM_TAG) |
| #define | F_ISECT_SET_UNKNOWN(f) BM_elem_flag_enable(BM_FACE_FIRST_LOOP(f), BM_ELEM_TAG) |
| #define | F_ISECT_SET_OUTSIDE(f) BM_elem_flag_disable(BM_FACE_FIRST_LOOP(f), BM_ELEM_TAG) |
Functions | |
Drawing | |
| static void | knifetool_raycast_planes (const KnifeTool_OpData *kcd, float r_v1[3], float r_v2[3]) |
| static void | knifetool_draw_angle_snapping (const KnifeTool_OpData *kcd) |
| static void | knifetool_draw_orientation_locking (const KnifeTool_OpData *kcd) |
| static void | knifetool_draw_visible_distances (const KnifeTool_OpData *kcd) |
| static void | knifetool_draw_angle (const KnifeTool_OpData *kcd, const float start[3], const float mid[3], const float end[3], const float start_ss[2], const float mid_ss[2], const float end_ss[2], const float angle) |
| static void | knifetool_draw_visible_angles (const KnifeTool_OpData *kcd) |
| static void | knifetool_draw_dist_angle (const KnifeTool_OpData *kcd) |
| static void | knifetool_draw (const bContext *, ARegion *, void *arg) |
Header | |
| static void | knife_update_header (bContext *C, wmOperator *op, KnifeTool_OpData *kcd) |
Knife Object Info Accessors (#KnifeObjectInfo) | |
| static const int * | knife_bm_tri_index_get (const KnifeTool_OpData *kcd, int ob_index, int tri_index, int tri_index_buf[3]) |
| static void | knife_bm_tri_cagecos_get (const KnifeTool_OpData *kcd, int ob_index, int tri_index, float cos[3][3]) |
| static void | knife_bm_tri_cagecos_get_worldspace (const KnifeTool_OpData *kcd, int ob_index, int tri_index, float cos[3][3]) |
Knife BVH Utils | |
| static bool | knife_bm_face_is_select (BMFace *f) |
| static bool | knife_bm_face_is_not_hidden (BMFace *f) |
| static void | knife_bvh_init (KnifeTool_OpData *kcd) |
| static void | knife_bvh_free (KnifeTool_OpData *kcd) |
| static void | knife_bvh_raycast_cb (void *userdata, int index, const BVHTreeRay *ray, BVHTreeRayHit *hit) |
| static BMFace * | knife_bvh_raycast (KnifeTool_OpData *kcd, const float co[3], const float dir[3], const float radius, float *r_dist, float r_cagehit[3], int *r_ob_index) |
| static BMFace * | knife_bvh_raycast_filter (KnifeTool_OpData *kcd, const float co[3], const float dir[3], const float radius, float *r_dist, float r_cagehit[3], int *r_ob_index, bool(*filter_cb)(BMFace *f, void *userdata), void *filter_userdata) |
Geometry Utils | |
| static void | knife_project_v2 (const KnifeTool_OpData *kcd, const float co[3], float sco[2]) |
| static void | knife_input_ray_segment (KnifeTool_OpData *kcd, const float mval[2], float r_origin[3], float r_end[3]) |
| static void UNUSED_FUNCTION | knifetool_recast_cageco (KnifeTool_OpData *kcd, float mval[3], float r_cage[3]) |
| static bool | knife_verts_edge_in_face (KnifeVert *v1, KnifeVert *v2, BMFace *f) |
| static void | knife_recalc_ortho (KnifeTool_OpData *kcd) |
Knife Element Utils | |
Currently only used in knife_find_line_hits. | |
| static BMElem * | bm_elem_from_knife_vert (KnifeVert *kfv, KnifeEdge **r_kfe) |
| static BMElem * | bm_elem_from_knife_edge (KnifeEdge *kfe) |
Knife Element List Utils | |
| static ListBase * | knife_empty_list (KnifeTool_OpData *kcd) |
| static void | knife_append_list (KnifeTool_OpData *kcd, ListBase *lst, void *elem) |
| static LinkData * | find_ref (ListBase *lb, void *ref) |
| static void | knife_append_list_no_dup (KnifeTool_OpData *kcd, ListBase *lst, void *elem) |
| static void | knife_add_to_vert_edges (KnifeTool_OpData *kcd, KnifeEdge *kfe) |
| static void | knife_add_edge_faces_to_vert (KnifeTool_OpData *kcd, KnifeVert *kfv, BMEdge *e) |
| static BMFace * | knife_find_common_face (ListBase *faces1, ListBase *faces2) |
Knife Element Creation | |
| static KnifeVert * | new_knife_vert (KnifeTool_OpData *kcd, const float co[3], const float cageco[3]) |
| static KnifeEdge * | new_knife_edge (KnifeTool_OpData *kcd) |
| static KnifeVert * | get_bm_knife_vert (KnifeTool_OpData *kcd, BMVert *v, int ob_index) |
| static KnifeEdge * | get_bm_knife_edge (KnifeTool_OpData *kcd, BMEdge *e, int ob_index) |
| static ListBase * | knife_get_face_kedges (KnifeTool_OpData *kcd, int ob_index, BMFace *f) |
| static void | knife_edge_append_face (KnifeTool_OpData *kcd, KnifeEdge *kfe, BMFace *f) |
| static KnifeVert * | knife_split_edge (KnifeTool_OpData *kcd, KnifeEdge *kfe, const float co[3], const float cageco[3], KnifeEdge **r_kfe) |
| static void | knife_join_edge (KnifeEdge *newkfe, KnifeEdge *kfe) |
Cut/Hit Utils | |
| static void | knife_snap_curr (KnifeTool_OpData *kcd, const float2 &mval) |
| static void | knife_start_cut (KnifeTool_OpData *kcd, const float2 &mval) |
| static void | linehit_to_knifepos (KnifePosData *kpos, KnifeLineHit *lh) |
| static int | linehit_compare (const KnifeLineHit &lh1, const KnifeLineHit &lh2) |
| static void | prepare_linehits_for_cut (KnifeTool_OpData *kcd) |
| static void | add_hit_to_facehits (KnifeTool_OpData *kcd, GHash *facehits, BMFace *f, KnifeLineHit *hit) |
| static bool | knife_add_single_cut__is_linehit_outside_face (BMFace *f, const KnifeLineHit *lh, const float co[3]) |
| static void | knife_add_single_cut (KnifeTool_OpData *kcd, KnifeLineHit *lh1, KnifeLineHit *lh2, BMFace *f) |
| static void | knife_cut_face (KnifeTool_OpData *kcd, BMFace *f, ListBase *hits) |
| static void | knife_make_face_cuts (KnifeTool_OpData *kcd, BMesh *bm, BMFace *f, ListBase *kfedges) |
| static int | sort_verts_by_dist_cb (void *co_p, const void *cur_a_p, const void *cur_b_p) |
| static void | knife_make_cuts (KnifeTool_OpData *kcd, int ob_index) |
| static void | knife_add_cut (KnifeTool_OpData *kcd) |
| static void | knife_finish_cut (KnifeTool_OpData *kcd) |
Screen Line Hits (#knife_find_line_hits) | |
| static void | set_lowest_face_tri (KnifeTool_OpData *kcd, BMEditMesh *em, BMFace *f, int index) |
| static int | get_lowest_face_tri (KnifeTool_OpData *kcd, BMFace *f) |
| static bool | knife_ray_intersect_face (KnifeTool_OpData *kcd, const float s[2], const float v1[3], const float v2[3], int ob_index, BMFace *f, const float face_tol_sq, float hit_co[3], float hit_cageco[3]) |
| static void | calc_ortho_extent (KnifeTool_OpData *kcd) |
| static bool | coinciding_edges (BMEdge *e1, BMEdge *e2) |
| static bool | bm_ray_cast_cb_elem_not_in_face_check (BMFace *f, void *user_data) |
| static bool | point_is_visible (KnifeTool_OpData *kcd, const float p[3], const float s[2], BMElem *ele_test) |
| static void | clip_to_ortho_planes (float v1[3], float v2[3], const float center[3], const float d) |
| static void | knife_linehit_set (KnifeTool_OpData *kcd, float s1[2], float s2[2], float sco[2], float cage[3], int ob_index, KnifeVert *v, KnifeEdge *kfe, KnifeLineHit *r_hit) |
| static bool | knife_linehit_face_test (KnifeTool_OpData *kcd, float s1[2], float s2[2], float sco[2], float ray_start[3], float ray_end[3], int ob_index, BMFace *f, float face_tol_sq, KnifeLineHit *r_hit) |
| static void | knife_find_line_hits (KnifeTool_OpData *kcd) |
KnifePosData Utils | |
| static void | knife_pos_data_clear (KnifePosData *kpd) |
Snapping (#knife_snap_update_from_mval) | |
| static bool | knife_find_closest_face (KnifeTool_OpData *kcd, const float3 &ray_origin, const float3 &ray_normal, const float2 &mval, KnifePosData *r_kpd) |
| static int | knife_sample_screen_density_from_closest_face (KnifeTool_OpData *kcd, const float radius, int ob_index, BMFace *f, const float cageco[3]) |
| static float | knife_snap_size (KnifeTool_OpData *kcd, float maxsize) |
| static bool | knife_closest_constrain_to_edge (KnifeTool_OpData *kcd, const float3 &kfv1_cageco, const float3 &kfv2_cageco, float r_close[3]) |
| static bool | knife_find_closest_edge_of_face (KnifeTool_OpData *kcd, int ob_index, BMFace *f, const float3 &ray_origin, const float3 &ray_normal, const float2 &curr_cage_ss, KnifePosData *r_kpd) |
| static bool | knife_find_closest_vert_of_edge (KnifeTool_OpData *kcd, const KnifeEdge *kfe, const float2 &cage_ss, KnifePosData *r_kpd) |
| static float | snap_v2_angle (float r[2], const float v[2], const float v_ref[2], float angle_snap) |
| static bool | knife_snap_angle_screen (KnifeTool_OpData *kcd) |
| static float | snap_v3_angle_plane (float r[3], const float v[3], const float v_ref[3], const float plane_no[3], float snap_step) |
| static bool | knife_snap_angle_relative (KnifeTool_OpData *kcd) |
| static int | knife_calculate_snap_ref_edges (KnifeTool_OpData *kcd) |
| static void | knife_reset_snap_angle_input (KnifeTool_OpData *kcd) |
| static void | knife_constrain_axis (KnifeTool_OpData *kcd) |
| static void | knife_snap_update_from_mval (KnifeTool_OpData *kcd, const float mval[2]) |
| static void | knifetool_undo (KnifeTool_OpData *kcd) |
#KnifeObjectInfo (#kcd->objects_info) Init and Free | |
| static void | knifetool_init_obinfo (KnifeTool_OpData *kcd, Object *ob, int ob_index, bool use_tri_indices) |
#KnifeTool_OpData (#op->customdata) Init and Free | |
| static void | knife_init_colors (KnifeColors *colors) |
| static void | knifetool_init (ViewContext *vc, KnifeTool_OpData *kcd, Vector< Object * > objects, const bool only_select, const bool cut_through, const bool xray, const int visible_measurements, const int angle_snapping, const float angle_snapping_increment, const bool is_interactive) |
| static void | knifetool_exit_ex (KnifeTool_OpData *kcd) |
| static void | knifetool_exit (wmOperator *op) |
Mouse-Moving Event Updates | |
| static int | knife_update_active (KnifeTool_OpData *kcd) |
| static void | knifetool_update_mval (KnifeTool_OpData *kcd, const float mval[2]) |
| static void | knifetool_update_mval_i (KnifeTool_OpData *kcd, const int mval_i[2]) |
Finalization | |
| static void | knifetool_finish_single_pre (KnifeTool_OpData *kcd, int ob_index) |
| static void | knifetool_finish_single_post (KnifeTool_OpData *, Object *ob) |
| static void | knifetool_finish_ex (KnifeTool_OpData *kcd) |
| static void | knifetool_finish (wmOperator *op) |
Operator (#MESH_OT_knife_tool) | |
| static void | knifetool_cancel (bContext *, wmOperator *op) |
| wmKeyMap * | knifetool_modal_keymap (wmKeyConfig *keyconf) |
| static void | knifetool_disable_angle_snapping (KnifeTool_OpData *kcd) |
| static void | knifetool_disable_orientation_locking (KnifeTool_OpData *kcd) |
| static int | knifetool_modal (bContext *C, wmOperator *op, const wmEvent *event) |
| static int | knifetool_invoke (bContext *C, wmOperator *op, const wmEvent *event) |
| void | MESH_OT_knife_tool (wmOperatorType *ot) |
Knife tool as a utility function | |
Can be used for internal slicing operations. | |
| static bool | edbm_mesh_knife_point_isect (LinkNode *polys, const float cent_ss[2]) |
| void | EDBM_mesh_knife (ViewContext *vc, const Span< Object * > objects, LinkNode *polys, bool use_tag, bool cut_through) |
Interactive editmesh knife tool.
Definition in file editmesh_knife.cc.
| #define F_ISECT_IS_UNKNOWN | ( | f | ) | BM_elem_flag_test(BM_FACE_FIRST_LOOP(f), BM_ELEM_TAG) |
Referenced by EDBM_mesh_knife().
| #define F_ISECT_SET_OUTSIDE | ( | f | ) | BM_elem_flag_disable(BM_FACE_FIRST_LOOP(f), BM_ELEM_TAG) |
Referenced by EDBM_mesh_knife().
| #define F_ISECT_SET_UNKNOWN | ( | f | ) | BM_elem_flag_enable(BM_FACE_FIRST_LOOP(f), BM_ELEM_TAG) |
Referenced by EDBM_mesh_knife().
| #define KMAXDIST (10 * UI_SCALE_FAC) /* Max mouse distance from edge before not detecting it. */ |
Definition at line 77 of file editmesh_knife.cc.
Referenced by knife_find_closest_face(), and knifetool_init().
| #define KNIFE_DEFAULT_ANGLE_SNAPPING_INCREMENT 30.0f |
Definition at line 90 of file editmesh_knife.cc.
Referenced by EDBM_mesh_knife(), knife_snap_angle_relative(), knife_snap_angle_screen(), knife_update_header(), and MESH_OT_knife_tool().
| #define KNIFE_FLT_EPS 0.00001f |
Definition at line 82 of file editmesh_knife.cc.
Referenced by knife_find_closest_edge_of_face(), knife_find_closest_vert_of_edge(), knife_ray_intersect_face(), and point_is_visible().
| #define KNIFE_FLT_EPS_PX_EDGE 0.05f |
Definition at line 87 of file editmesh_knife.cc.
Referenced by knife_find_line_hits().
| #define KNIFE_FLT_EPS_PX_FACE 0.05f |
Definition at line 88 of file editmesh_knife.cc.
Referenced by knife_find_line_hits().
| #define KNIFE_FLT_EPS_PX_VERT 0.5f |
Definition at line 86 of file editmesh_knife.cc.
Referenced by knife_find_line_hits().
| #define KNIFE_FLT_EPS_SQUARED (KNIFE_FLT_EPS * KNIFE_FLT_EPS) |
Definition at line 83 of file editmesh_knife.cc.
Referenced by knife_find_line_hits().
| #define KNIFE_FLT_EPSBIG 0.0005f |
Definition at line 84 of file editmesh_knife.cc.
Referenced by knife_closest_constrain_to_edge(), knife_find_closest_vert_of_edge(), knife_snap_angle_relative(), knifetool_draw_orientation_locking(), knifetool_draw_visible_angles(), and prepare_linehits_for_cut().
| #define KNIFE_MAX_ANGLE_SNAPPING_INCREMENT 180.0f |
Definition at line 92 of file editmesh_knife.cc.
Referenced by knife_snap_angle_relative(), knife_snap_angle_screen(), knife_update_header(), knifetool_modal(), and MESH_OT_knife_tool().
| #define KNIFE_MIN_ANGLE_SNAPPING_INCREMENT 0.0f |
Definition at line 91 of file editmesh_knife.cc.
Referenced by knife_snap_angle_relative(), knife_snap_angle_screen(), knife_update_header(), knifetool_modal(), and MESH_OT_knife_tool().
| #define USE_NET_ISLAND_CONNECT |
Definition at line 75 of file editmesh_knife.cc.
| anonymous enum |
Definition at line 328 of file editmesh_knife.cc.
| anonymous enum |
| Enumerator | |
|---|---|
| KNF_CONSTRAIN_ANGLE_MODE_NONE | |
| KNF_CONSTRAIN_ANGLE_MODE_SCREEN | |
| KNF_CONSTRAIN_ANGLE_MODE_RELATIVE | |
Definition at line 350 of file editmesh_knife.cc.
| anonymous enum |
| Enumerator | |
|---|---|
| KNF_CONSTRAIN_AXIS_NONE | |
| KNF_CONSTRAIN_AXIS_X | |
| KNF_CONSTRAIN_AXIS_Y | |
| KNF_CONSTRAIN_AXIS_Z | |
Definition at line 356 of file editmesh_knife.cc.
| anonymous enum |
| Enumerator | |
|---|---|
| KNF_CONSTRAIN_AXIS_MODE_NONE | |
| KNF_CONSTRAIN_AXIS_MODE_GLOBAL | |
| KNF_CONSTRAIN_AXIS_MODE_LOCAL | |
Definition at line 363 of file editmesh_knife.cc.
| anonymous enum |
| Enumerator | |
|---|---|
| KNF_MEASUREMENT_NONE | |
| KNF_MEASUREMENT_BOTH | |
| KNF_MEASUREMENT_DISTANCE | |
| KNF_MEASUREMENT_ANGLE | |
Definition at line 369 of file editmesh_knife.cc.
| enum KnifeMode |
| Enumerator | |
|---|---|
| MODE_IDLE | |
| MODE_DRAGGING | |
| MODE_CONNECT | |
| MODE_PANNING | |
Definition at line 216 of file editmesh_knife.cc.
|
static |
Definition at line 1962 of file editmesh_knife.cc.
References BLI_ghash_insert(), BLI_ghash_lookup(), knife_append_list_no_dup(), and knife_empty_list().
Referenced by knife_add_cut().
Definition at line 1562 of file editmesh_knife.cc.
References KnifeEdge::basef, and KnifeEdge::e.
Referenced by knife_find_line_hits().
Definition at line 1523 of file editmesh_knife.cc.
References BLI_listbase_is_single(), KnifeEdge::e, KnifeVert::edges, KnifeEdge::faces, ListBase::first, LISTBASE_FOREACH, and KnifeVert::v.
Referenced by knife_find_line_hits().
|
static |
Definition at line 2601 of file editmesh_knife.cc.
References BM_EDGE, BM_edge_in_face(), BM_edge_is_boundary(), BM_EDGES_OF_FACE, BM_FACE, BM_ITER_ELEM, BM_VERT, BM_vert_in_face(), coinciding_edges(), and e.
Referenced by point_is_visible().
|
static |
Calculate the center and maximum excursion of mesh. (Considers all meshes in multi-object edit mode)
Definition at line 2544 of file editmesh_knife.cc.
References BKE_editmesh_from_object(), BMEditMesh::bm, BM_ITER_MESH, BM_VERTS_OF_MESH, BMVert::co, copy_v3_v3(), INIT_MINMAX, blender::Span< T >::is_empty(), len_v3v3(), mid_v3_v3v3(), min, minmax_v3v3_v3(), mul_m4_v3(), KnifeTool_OpData::objects, KnifeTool_OpData::objects_info, KnifeTool_OpData::ortho_extent, KnifeTool_OpData::ortho_extent_center, blender::Vector< T, InlineBufferCapacity, Allocator >::size(), BMesh::totvert, and v.
Referenced by knife_find_line_hits().
|
static |
Definition at line 2714 of file editmesh_knife.cc.
References add_v3_v3(), madd_v3_v3v3fl(), normalize_v3(), project_plane_normalized_v3_v3v3(), sub_v3_v3(), sub_v3_v3v3(), and v2.
Referenced by knife_find_line_hits().
Definition at line 2580 of file editmesh_knife.cc.
References BMVert::co, equals_v3v3(), BMEdge::v1, and BMEdge::v2.
Referenced by bm_ray_cast_cb_elem_not_in_face_check().
| void EDBM_mesh_knife | ( | ViewContext * | vc, |
| const Span< Object * > | objects, | ||
| LinkNode * | polys, | ||
| bool | use_tag, | ||
| bool | cut_through ) |
Definition at line 4780 of file editmesh_knife.cc.
References BKE_editmesh_from_object(), bm, BMEditMesh::bm, BM_EDGE, BM_EDGES_OF_MESH, BM_elem_flag_disable, BM_elem_flag_enable, BM_elem_flag_test, BM_ELEM_TAG, BM_face_calc_point_in_face(), BM_FACE_FIRST_LOOP, BM_FACES_OF_EDGE, BM_FACES_OF_MESH, BM_ITER_ELEM, BM_ITER_MESH, BM_mesh_elem_hflag_enable_all(), KnifeTool_OpData::cut_through, BMLoop::e, e, edbm_mesh_knife_point_isect(), BMLoop::f, F_ISECT_IS_UNKNOWN, F_ISECT_SET_OUTSIDE, F_ISECT_SET_UNKNOWN, float, KnifeTool_OpData::ignore_edge_snapping, KnifeTool_OpData::ignore_vert_snapping, blender::Vector< T, InlineBufferCapacity, Allocator >::index_range(), KNF_CONSTRAIN_ANGLE_MODE_NONE, KNF_MEASUREMENT_NONE, knife_add_cut(), KNIFE_DEFAULT_ANGLE_SNAPPING_INCREMENT, knife_finish_cut(), knife_project_v2(), knife_recalc_ortho(), knife_start_cut(), knifetool_exit_ex(), knifetool_finish_single_post(), knifetool_finish_single_pre(), knifetool_init(), knifetool_update_mval(), LinkNode::link, MEM_allocN_len, KnifeTool_OpData::mode, MODE_DRAGGING, MODE_IDLE, mul_m4_v3(), BMLoop::next, LinkNode::next, KnifeTool_OpData::objects, point_is_visible(), and BMLoop::radial_next.
Referenced by knifeproject_exec().
Definition at line 4762 of file editmesh_knife.cc.
References float, int, isect_point_poly_v2(), LinkNode::link, MEM_allocN_len, and LinkNode::next.
Referenced by EDBM_mesh_knife().
Definition at line 1599 of file editmesh_knife.cc.
References LISTBASE_FOREACH.
Referenced by knife_add_single_cut(), knife_append_list_no_dup(), knife_make_cuts(), and knife_split_edge().
|
static |
Definition at line 1708 of file editmesh_knife.cc.
References BLI_ghash_insert(), BLI_ghash_lookup(), BM_FACES_OF_EDGE, BM_ITER_ELEM, e, KnifeEdge::e, KnifeEdge::faces, get_bm_knife_vert(), knife_add_to_vert_edges(), knife_append_list(), new_knife_edge(), KnifeTool_OpData::origedgemap, KnifeEdge::v1, and KnifeEdge::v2.
Referenced by knife_get_face_kedges().
|
static |
Definition at line 1674 of file editmesh_knife.cc.
References BLI_ghash_insert(), BLI_ghash_lookup(), BM_elem_index_get, BM_FACES_OF_VERT, BM_ITER_ELEM, BMVert::co, KnifeVert::faces, knife_append_list(), mul_v3_m4v3(), new_knife_vert(), KnifeVert::ob_index, KnifeTool_OpData::objects, KnifeTool_OpData::objects_info, KnifeTool_OpData::origvertmap, KnifeVert::v, and v.
Referenced by get_bm_knife_edge().
|
static |
Definition at line 2449 of file editmesh_knife.cc.
References BLI_assert, BLI_ghash_lookup(), KnifeTool_OpData::facetrimap, and POINTER_AS_INT.
Referenced by knife_ray_intersect_face().
|
static |
Definition at line 2322 of file editmesh_knife.cc.
References add_hit_to_facehits(), BLI_ghash_free(), BLI_ghash_ptr_new(), BLI_ghashIterator_getKey(), BLI_ghashIterator_getValue(), BLI_stack_push_r(), KnifePosData::bmface, KnifeMeasureData::cage, KnifePosData::cage, blender::Vector< T, InlineBufferCapacity, Allocator >::clear_and_shrink(), copy_v2_v2(), copy_v3_v3(), KnifeTool_OpData::curr, KnifeUndoFrame::cuts, KnifeLineHit::f, KnifeEdge::faces, KnifeVert::faces, GHASH_ITER, KnifeTool_OpData::is_drag_hold, KnifeTool_OpData::is_drag_undo, blender::Vector< T, InlineBufferCapacity, Allocator >::is_empty(), KnifeMeasureData::is_stored, KnifeLineHit::kfe, knife_cut_face(), blender::Vector< T, InlineBufferCapacity, Allocator >::last(), linehit_to_knifepos(), KnifeTool_OpData::linehits, LISTBASE_FOREACH, KnifeTool_OpData::mdata, KnifeUndoFrame::mdata, KnifeMeasureData::mval, KnifePosData::mval, KnifeUndoFrame::pos, prepare_linehits_for_cut(), KnifeTool_OpData::prev, blender::Vector< T, InlineBufferCapacity, Allocator >::size(), KnifeUndoFrame::splits, KnifeTool_OpData::undo, KnifeTool_OpData::undostack, KnifeLineHit::v, and KnifePosData::vert.
Referenced by EDBM_mesh_knife(), and knifetool_modal().
|
static |
Definition at line 1624 of file editmesh_knife.cc.
References BM_FACES_OF_EDGE, BM_ITER_ELEM, e, KnifeVert::faces, and knife_append_list().
Referenced by knife_split_edge().
|
static |
Definition at line 2005 of file editmesh_knife.cc.
References KnifeEdge::basef, BLI_assert, BM_edge_exists(), KnifeLineHit::cagehit, KnifeUndoFrame::cuts, KnifeLineHit::f, KnifeEdge::faces, KnifeVert::faces, find_ref(), KnifeLineHit::hit, KnifeEdge::is_cut, KnifeVert::is_cut, KnifeLineHit::kfe, knife_add_single_cut__is_linehit_outside_face(), knife_add_to_vert_edges(), knife_append_list(), knife_edge_append_face(), knife_split_edge(), knife_verts_edge_in_face(), new_knife_edge(), new_knife_vert(), KnifeLineHit::ob_index, KnifeVert::ob_index, KnifeTool_OpData::undo, KnifeLineHit::v, KnifeVert::v, KnifeEdge::v1, and KnifeEdge::v2.
Referenced by knife_cut_face().
|
static |
Special purpose function, if the linehit is connected to a real edge/vert. Return true if co is outside the face.
Definition at line 1980 of file editmesh_knife.cc.
References BM_face_edge_share_loop(), BM_face_vert_share_loop(), BM_loop_point_side_of_edge_test(), BM_loop_point_side_of_loop_test(), KnifeEdge::e, KnifeLineHit::kfe, l, KnifeLineHit::v, and KnifeVert::v.
Referenced by knife_add_single_cut().
|
static |
Definition at line 1617 of file editmesh_knife.cc.
References KnifeVert::edges, knife_append_list(), KnifeEdge::v1, and KnifeEdge::v2.
Referenced by get_bm_knife_edge(), knife_add_single_cut(), and knife_split_edge().
|
static |
Definition at line 1590 of file editmesh_knife.cc.
References BLI_addtail(), BLI_mempool_calloc(), LinkData::data, and KnifeTool_OpData::refs.
Referenced by get_bm_knife_edge(), get_bm_knife_vert(), knife_add_edge_faces_to_vert(), knife_add_single_cut(), knife_add_to_vert_edges(), knife_append_list_no_dup(), knife_edge_append_face(), knife_get_face_kedges(), knife_make_cuts(), and knife_split_edge().
|
static |
Definition at line 1610 of file editmesh_knife.cc.
References find_ref(), and knife_append_list().
Referenced by add_hit_to_facehits().
|
static |
Definition at line 1204 of file editmesh_knife.cc.
References BM_elem_flag_test, and BM_ELEM_HIDDEN.
Referenced by knife_bvh_init().
|
static |
Definition at line 1199 of file editmesh_knife.cc.
References BM_elem_flag_test, and BM_ELEM_SELECT.
Referenced by knife_bvh_init().
|
static |
Definition at line 1168 of file editmesh_knife.cc.
References copy_v3_v3(), cos(), knife_bm_tri_index_get(), KnifeTool_OpData::objects_info, and KnifeObjectInfo::positions_cage.
Referenced by knife_bm_tri_cagecos_get_worldspace().
|
static |
Definition at line 1181 of file editmesh_knife.cc.
References cos(), knife_bm_tri_cagecos_get(), mul_m4_v3(), and KnifeTool_OpData::objects.
Referenced by knife_bvh_init(), knife_bvh_raycast_cb(), and knife_ray_intersect_face().
|
static |
Definition at line 1152 of file editmesh_knife.cc.
References BM_elem_index_get, KnifeObjectInfo::em, BMEditMesh::looptris, KnifeTool_OpData::objects_info, KnifeObjectInfo::tri_indices, and v.
Referenced by knife_bm_tri_cagecos_get().
|
static |
Definition at line 1291 of file editmesh_knife.cc.
References BLI_bvhtree_free(), KnifeTool_OpData::bvh, and KnifeBVH::tree.
Referenced by knifetool_exit_ex().
|
static |
Definition at line 1209 of file editmesh_knife.cc.
References BKE_editmesh_from_object(), BLI_bvhtree_balance(), BLI_bvhtree_insert(), BLI_bvhtree_new(), KnifeTool_OpData::bvh, KnifeTool_OpData::cut_through, blender::Vector< T, InlineBufferCapacity, Allocator >::index_range(), knife_bm_face_is_not_hidden(), knife_bm_face_is_select(), knife_bm_tri_cagecos_get_worldspace(), BMEditMesh::looptris, KnifeTool_OpData::objects, KnifeTool_OpData::only_select, blender::Array< T, InlineBufferCapacity, Allocator >::size(), and KnifeBVH::tree.
Referenced by knifetool_init().
|
static |
Definition at line 1370 of file editmesh_knife.cc.
References BLI_bvhtree_ray_cast(), KnifeTool_OpData::bvh, copy_v3_v3(), BVHTreeRayHit::dist, FLT_MAX, knife_bvh_raycast_cb(), KnifeBVH::looptris, KnifeBVH::ob_index, and KnifeBVH::tree.
Referenced by knife_bvh_raycast_filter(), knife_calculate_snap_ref_edges(), knife_find_closest_face(), knife_snap_angle_relative(), knifetool_recast_cageco(), and point_is_visible().
|
static |
Definition at line 1299 of file editmesh_knife.cc.
References BKE_editmesh_from_object(), BLI_assert, KnifeTool_OpData::bvh, copy_v3_v3(), blender::Array< T, InlineBufferCapacity, Allocator >::data(), ED_view3d_clipping_test(), BMLoop::f, KnifeBVH::filter_cb, KnifeBVH::filter_data, isect_ray_tri_epsilon_v3(), isect_ray_tri_v3(), isect_ray_tri_watertight_v3(), knife_bm_tri_cagecos_get_worldspace(), BMEditMesh::looptris, KnifeBVH::looptris, madd_v3_v3v3fl(), BMFace::no, KnifeBVH::ob_index, KnifeTool_OpData::objects, ViewContext::rv3d, RV3D_CLIPPING_ENABLED, blender::Array< T, InlineBufferCapacity, Allocator >::size(), blender::Vector< T, InlineBufferCapacity, Allocator >::size(), UNPACK3, ViewContext::v3d, and KnifeTool_OpData::vc.
Referenced by knife_bvh_raycast().
|
static |
Definition at line 1408 of file editmesh_knife.cc.
References KnifeTool_OpData::bvh, KnifeBVH::filter_cb, KnifeBVH::filter_data, and knife_bvh_raycast().
Referenced by point_is_visible().
|
static |
Definition at line 3600 of file editmesh_knife.cc.
References BM_edge_in_face(), count, KnifeTool_OpData::curr, KnifeEdge::e, KnifePosData::edge, KnifeVert::edges, KnifeEdge::is_invalid, knife_bvh_raycast(), knife_input_ray_segment(), LISTBASE_FOREACH, KnifePosData::mval, normalize_v3_v3(), KnifeTool_OpData::prev, sub_v3_v3v3(), and KnifePosData::vert.
Referenced by knife_snap_update_from_mval().
|
static |
Find a point on an edge that is closest to the axis of a constrained mode.
Definition at line 3224 of file editmesh_knife.cc.
References KnifePosData::cage, KnifeTool_OpData::curr, interp_v3_v3v3(), isect_ray_line_v3(), KNIFE_FLT_EPSBIG, and KnifeTool_OpData::prev.
Referenced by knife_find_closest_edge_of_face().
|
static |
Constrains the current cut to an axis. If scene orientation is set to anything other than global it takes priority. Otherwise kcd->constrain_axis_mode is used.
Definition at line 3657 of file editmesh_knife.cc.
References BKE_scene_orientation_get_index(), KnifePosData::cage, closest_to_line_v2(), KnifeTool_OpData::constrain_axis, KnifeTool_OpData::constrain_axis_mode, copy_v2_v2(), copy_v3_v3(), KnifeTool_OpData::curr, ED_transform_calc_orientation_from_type_ex(), ED_view3d_win_to_3d(), invert_m3(), knife_project_v2(), mul_m3_m3_pre(), KnifePosData::mval, KnifeTool_OpData::mval, KnifePosData::ob_index, ViewContext::obedit, KnifeTool_OpData::objects, KnifeTool_OpData::prev, KnifeTool_OpData::region, ARegion::regiondata, SCE_ORIENT_DEFAULT, KnifeTool_OpData::scene, ViewContext::v3d, KnifeTool_OpData::vc, and ViewContext::view_layer.
Referenced by knife_snap_update_from_mval().
|
static |
Definition at line 2086 of file editmesh_knife.cc.
References BLI_listbase_count_at_most(), LinkData::data, ListBase::first, knife_add_single_cut(), and LinkData::next.
Referenced by knife_add_cut().
|
static |
Definition at line 1752 of file editmesh_knife.cc.
References KnifeEdge::faces, knife_append_list(), knife_get_face_kedges(), KnifeVert::ob_index, and KnifeEdge::v1.
Referenced by knife_add_single_cut(), and knife_split_edge().
|
static |
Definition at line 1581 of file editmesh_knife.cc.
References KnifeTool_OpData::arena, BLI_listbase_clear(), and BLI_memarena_alloc().
Referenced by add_hit_to_facehits(), knife_get_face_kedges(), and knife_make_cuts().
|
static |
Definition at line 3246 of file editmesh_knife.cc.
References KnifeTool_OpData::axis_constrained, KnifePosData::cage, KnifeVert::cageco, closest_ray_to_segment_v3(), copy_v3_v3(), ED_view3d_clipping_test(), KnifePosData::edge, KnifeTool_OpData::ethresh, KnifeTool_OpData::ignore_vert_snapping, KnifeTool_OpData::is_angle_snapping, KnifeTool_OpData::is_interactive, KnifeEdge::is_invalid, knife_closest_constrain_to_edge(), KNIFE_FLT_EPS, knife_get_face_kedges(), knife_project_v2(), knife_snap_size(), len_squared_v2v2(), LISTBASE_FOREACH, mid_v3_v3v3(), KnifeTool_OpData::mode, MODE_DRAGGING, KnifePosData::mval, KnifeTool_OpData::prev, ViewContext::rv3d, RV3D_CLIPPING_ENABLED, KnifeTool_OpData::snap_midpoints, KnifeEdge::v1, KnifeEdge::v2, ViewContext::v3d, and KnifeTool_OpData::vc.
Referenced by knife_snap_curr().
|
static |
Definition at line 3092 of file editmesh_knife.cc.
References BKE_object_is_visible_in_viewport(), BLI_assert, BM_elem_flag_test, BM_ELEM_SELECT, KnifePosData::bmface, KnifePosData::cage, EDBM_face_find_nearest(), blender::Vector< T, InlineBufferCapacity, Allocator >::first_index_of_try(), int, KnifeTool_OpData::is_interactive, KMAXDIST, knife_bvh_raycast(), KnifePosData::mval, ViewContext::mval, KnifePosData::ob_index, ViewContext::obact, KnifeTool_OpData::objects, KnifeTool_OpData::only_select, ViewContext::v3d, and KnifeTool_OpData::vc.
Referenced by knife_snap_curr().
|
static |
Definition at line 3329 of file editmesh_knife.cc.
References KnifeTool_OpData::axis_constrained, KnifePosData::cage, KnifeVert::cageco, copy_v2_v2(), KnifeTool_OpData::curr, dist_squared_to_line_segment_v2(), ED_view3d_clipping_test(), FLT_MAX, KnifeTool_OpData::ignore_vert_snapping, KnifeTool_OpData::is_angle_snapping, KnifeTool_OpData::is_interactive, KNIFE_FLT_EPS, KNIFE_FLT_EPSBIG, knife_project_v2(), knife_snap_size(), len_squared_v2v2(), KnifeTool_OpData::mode, MODE_DRAGGING, KnifePosData::mval, KnifeTool_OpData::prev, ViewContext::rv3d, RV3D_CLIPPING_ENABLED, KnifeEdge::v1, KnifeEdge::v2, ViewContext::v3d, KnifeTool_OpData::vc, and KnifeTool_OpData::vthresh.
Referenced by knife_snap_curr().
Definition at line 1636 of file editmesh_knife.cc.
References LISTBASE_FOREACH.
Referenced by knife_split_edge().
|
static |
Definition at line 2792 of file editmesh_knife.cc.
References blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), blender::Vector< T, InlineBufferCapacity, Allocator >::append(), BKE_editmesh_from_object(), BLI_assert, BLI_bvhtree_intersect_plane(), BM_elem_flag_test, bm_elem_from_knife_edge(), bm_elem_from_knife_vert(), BM_ELEM_SELECT, KnifeTool_OpData::bvh, KnifePosData::cage, calc_ortho_extent(), blender::Vector< T, InlineBufferCapacity, Allocator >::clear_and_shrink(), clip_to_ortho_planes(), closest_to_line_segment_v2(), blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::contains(), copy_v2_v2(), copy_v3_v3(), cross_v3_v3v3(), KnifeTool_OpData::curr, blender::Array< T, InlineBufferCapacity, Allocator >::data(), ViewContext::depsgraph, dist_squared_to_line_segment_v2(), ED_view3d_win_to_segment_clipped(), KnifePosData::edge, ELEM, BMLoop::f, fabsf, faces, KnifeTool_OpData::is_drag_hold, KnifeTool_OpData::is_interactive, KnifeEdge::is_invalid, KnifeTool_OpData::is_ortho, isect_line_line_v3(), isect_seg_seg_v2_point_ex(), KNIFE_FLT_EPS_PX_EDGE, KNIFE_FLT_EPS_PX_FACE, KNIFE_FLT_EPS_PX_VERT, KNIFE_FLT_EPS_SQUARED, knife_get_face_kedges(), knife_input_ray_segment(), knife_linehit_face_test(), knife_linehit_set(), knife_project_v2(), len_squared_v2v2(), len_v2v2(), KnifeTool_OpData::linehits, LISTBASE_FOREACH, blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::lookup(), BMEditMesh::looptris, MEM_freeN(), mid_v2_v2v2(), mid_v3_v3v3(), KnifePosData::mval, KnifeTool_OpData::objects, KnifeTool_OpData::only_select, KnifeTool_OpData::ortho_extent, KnifeTool_OpData::ortho_extent_center, RegionView3D::persp, plane_from_point_normal_v3(), point_is_visible(), KnifeTool_OpData::prev, KnifeTool_OpData::region, blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::remove(), result, ViewContext::rv3d, RV3D_CAMOB, set_lowest_face_tri(), blender::Array< T, InlineBufferCapacity, Allocator >::size(), blender::Vector< T, InlineBufferCapacity, Allocator >::size(), KnifeTool_OpData::snap_midpoints, sub_v3_v3v3(), KnifeBVH::tree, v, KnifeEdge::v1, KnifeEdge::v2, v2, ViewContext::v3d, KnifeTool_OpData::vc, and KnifePosData::vert.
Referenced by knife_update_active().
|
static |
Definition at line 2405 of file editmesh_knife.cc.
References blender::Vector< T, InlineBufferCapacity, Allocator >::clear_and_shrink(), and KnifeTool_OpData::linehits.
Referenced by EDBM_mesh_knife(), and knifetool_modal().
|
static |
Definition at line 1732 of file editmesh_knife.cc.
References BLI_ghash_insert(), BLI_ghash_lookup(), BM_EDGES_OF_FACE, BM_ITER_ELEM, e, get_bm_knife_edge(), KnifeTool_OpData::kedgefacemap, knife_append_list(), and knife_empty_list().
Referenced by knife_edge_append_face(), knife_find_closest_edge_of_face(), knife_find_line_hits(), knife_ray_intersect_face(), and knife_sample_screen_density_from_closest_face().
|
static |
Definition at line 3921 of file editmesh_knife.cc.
References SPACE_VIEW3D, TH_ACTIVE_SPLINE, TH_AXIS_X, TH_AXIS_Y, TH_AXIS_Z, TH_HANDLE_SEL_VECT, TH_NURB_SEL_ULINE, TH_NURB_ULINE, TH_NURB_VLINE, TH_TRANSFORM, and UI_GetThemeColorType3ubv().
Referenced by knifetool_init().
|
static |
Definition at line 1441 of file editmesh_knife.cc.
References ViewContext::depsgraph, ED_view3d_win_to_segment_clipped(), KnifeTool_OpData::region, ViewContext::v3d, and KnifeTool_OpData::vc.
Referenced by knife_calculate_snap_ref_edges(), knife_find_line_hits(), knife_snap_angle_relative(), knife_snap_curr(), and knifetool_recast_cageco().
Definition at line 1816 of file editmesh_knife.cc.
References KnifeEdge::is_invalid, KnifeVert::is_invalid, KnifeVert::is_splitting, KnifeEdge::splits, KnifeEdge::v1, and KnifeEdge::v2.
Referenced by knifetool_undo().
|
static |
Definition at line 2766 of file editmesh_knife.cc.
References copy_v3_v3(), KnifeLineHit::f, KnifeLineHit::hit, knife_linehit_set(), knife_ray_intersect_face(), and point_is_visible().
Referenced by knife_find_line_hits().
|
static |
Definition at line 2730 of file editmesh_knife.cc.
References KnifeVert::cageco, KnifeLineHit::cagehit, BMVert::co, KnifeVert::co, copy_v2_v2(), copy_v3_v3(), dot_m4_v3_row_z(), KnifeLineHit::hit, KnifeLineHit::kfe, KnifeLineHit::l, len_v2v2(), KnifeLineHit::m, KnifeLineHit::ob_index, RegionView3D::persmatob, ViewContext::rv3d, KnifeLineHit::schit, transform_point_by_seg_v3(), KnifeLineHit::v, v, KnifeEdge::v1, KnifeEdge::v2, and KnifeTool_OpData::vc.
Referenced by knife_find_line_hits(), and knife_linehit_face_test().
|
static |
Definition at line 2228 of file editmesh_knife.cc.
References blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add(), KnifeEdge::basef, BKE_editmesh_from_object(), BLI_listbase_sort_r(), BLI_mempool_iternew(), BLI_mempool_iterstep(), bm, BMEditMesh::bm, BM_edge_select_set(), BM_edge_split(), BM_ELEM_SELECT, BMVert::co, KnifeVert::co, e, KnifeEdge::e, EDBM_flag_disable_all(), KnifeVert::edges, find_ref(), KnifeEdge::is_cut, KnifeEdge::is_invalid, KnifeVert::is_invalid, blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::items(), KnifeTool_OpData::kedges, knife_append_list(), knife_empty_list(), knife_make_face_cuts(), KnifeTool_OpData::kverts, line_point_factor_v3(), LISTBASE_FOREACH, blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::lookup_default(), KnifeVert::ob_index, KnifeTool_OpData::objects, KnifeTool_OpData::only_select, KnifeTool_OpData::select_result, sort_verts_by_dist_cb(), KnifeVert::v, and KnifeEdge::v1.
Referenced by knifetool_finish_single_pre().
|
static |
Definition at line 2100 of file editmesh_knife.cc.
References KnifeTool_OpData::arena, BLI_array_alloca, BLI_assert, BLI_gset_add(), BLI_gset_clear(), BLI_gset_len(), BLI_listbase_count(), BLI_memarena_clear(), bm, BM_edge_create(), BM_edge_exists(), BM_edge_in_face(), BM_edge_is_wire(), BM_edge_kill(), BM_edge_select_set(), BM_elem_flag_test, BM_ELEM_SELECT, BM_face_split_edgenet(), BM_face_split_edgenet_connect_islands(), BM_vert_create(), KnifeVert::co, e, KnifeEdge::e, KnifeTool_OpData::edge_visit, KnifeTool_OpData::edgenet, KnifeEdge::is_invalid, LISTBASE_FOREACH, KnifeTool_OpData::select_result, KnifeVert::v, KnifeEdge::v1, and KnifeEdge::v2.
Referenced by knife_make_cuts().
|
static |
Definition at line 3076 of file editmesh_knife.cc.
References KnifePosData::bmface, KnifePosData::cage, KnifePosData::edge, KnifePosData::mval, KnifePosData::ob_index, KnifePosData::vert, zero_v2(), and zero_v3().
Referenced by knife_snap_curr(), knife_snap_update_from_mval(), and knifetool_init().
|
static |
Definition at line 1435 of file editmesh_knife.cc.
References ED_view3d_project_float_global(), KnifeTool_OpData::region, and V3D_PROJ_TEST_NOP.
Referenced by EDBM_mesh_knife(), knife_constrain_axis(), knife_find_closest_edge_of_face(), knife_find_closest_vert_of_edge(), knife_find_line_hits(), knife_ray_intersect_face(), knife_sample_screen_density_from_closest_face(), knife_snap_angle_relative(), knife_snap_update_from_mval(), and knifetool_modal().
|
static |
Find intersection of v1-v2 with face f. Only take intersections that are at least face_tol_sq (in screen space) away from other intersection elements. If v1-v2 is coplanar with f, call that "no intersection though it really means "infinite number of intersections". In such a case we should have gotten hits on edges or verts of the face.
Definition at line 2466 of file editmesh_knife.cc.
References BKE_editmesh_from_object(), BLI_assert, KnifeVert::cageco, BMVert::co, dist_squared_to_line_segment_v2(), dist_squared_to_plane_v3(), get_lowest_face_tri(), interp_v3_v3v3v3_uv(), KnifeEdge::is_invalid, isect_ray_tri_epsilon_v3(), knife_bm_tri_cagecos_get_worldspace(), KNIFE_FLT_EPS, knife_get_face_kedges(), knife_project_v2(), LISTBASE_FOREACH, BMEditMesh::looptris, normal_tri_v3(), normalize_v3(), KnifeTool_OpData::objects, plane_from_point_normal_v3(), blender::Array< T, InlineBufferCapacity, Allocator >::size(), sub_v3_v3v3(), UNPACK3, v, KnifeEdge::v1, KnifeEdge::v2, and v2.
Referenced by knife_linehit_face_test().
|
static |
Definition at line 1509 of file editmesh_knife.cc.
References KnifeTool_OpData::clipend, KnifeTool_OpData::clipsta, ViewContext::depsgraph, ED_view3d_clip_range_get(), KnifeTool_OpData::is_ortho, ViewContext::rv3d, ViewContext::v3d, and KnifeTool_OpData::vc.
Referenced by EDBM_mesh_knife(), knifetool_init(), knifetool_modal(), and knifetool_update_mval().
|
static |
Definition at line 3644 of file editmesh_knife.cc.
References KnifeTool_OpData::num, NumInput::str, NumInput::str_cur, and NumInput::val.
Referenced by knifetool_modal().
|
static |
Find the 2d screen space density of vertices within a radius. Used to scale snapping distance for picking edges/verts.
Arguments f and cageco should be the result of a call to knife_find_closest_face.
Definition at line 3153 of file editmesh_knife.cc.
References KnifeVert::cageco, ED_view3d_clipping_test(), KnifeEdge::is_invalid, KnifeVert::is_invalid, knife_get_face_kedges(), knife_project_v2(), len_squared_v2v2(), LISTBASE_FOREACH, ViewContext::rv3d, RV3D_CLIPPING_ENABLED, KnifeEdge::v1, KnifeEdge::v2, ViewContext::v3d, and KnifeTool_OpData::vc.
Referenced by knife_snap_size().
|
static |
Definition at line 3461 of file editmesh_knife.cc.
References add_v3_v3(), KnifeTool_OpData::angle, KnifeTool_OpData::angle_snapping_increment, BM_edge_in_face(), KnifePosData::cage, KnifeVert::cageco, compare_v3v3(), copy_v2_v2(), copy_v3_v3(), count, KnifeTool_OpData::curr, DEG2RADF, KnifeEdge::e, KnifePosData::edge, KnifeVert::edges, KnifeEdge::faces, KnifeVert::faces, KnifeEdge::is_invalid, isect_ray_plane_v3_factor(), knife_bvh_raycast(), KNIFE_DEFAULT_ANGLE_SNAPPING_INCREMENT, KNIFE_FLT_EPSBIG, knife_input_ray_segment(), KNIFE_MAX_ANGLE_SNAPPING_INCREMENT, KNIFE_MIN_ANGLE_SNAPPING_INCREMENT, knife_project_v2(), LISTBASE_FOREACH, madd_v3_v3v3fl(), mul_transposed_mat3_m4_v3(), KnifePosData::mval, KnifeTool_OpData::mval, BMFace::no, normalize_v3(), normalize_v3_v3(), KnifePosData::ob_index, KnifeTool_OpData::objects, KnifeTool_OpData::prev, KnifeTool_OpData::snap_edge, KnifeTool_OpData::snap_ref_edge, snap_v3_angle_plane(), sub_v3_v3v3(), KnifeVert::v, KnifeEdge::v1, KnifeEdge::v2, v2, and KnifePosData::vert.
Referenced by knife_snap_update_from_mval().
|
static |
Definition at line 3413 of file editmesh_knife.cc.
References add_v2_v2v2(), KnifeTool_OpData::angle, KnifeTool_OpData::angle_snapping_increment, copy_v2_v2(), KnifeTool_OpData::curr, DEG2RADF, is_zero_v2(), KNIFE_DEFAULT_ANGLE_SNAPPING_INCREMENT, KNIFE_MAX_ANGLE_SNAPPING_INCREMENT, KNIFE_MIN_ANGLE_SNAPPING_INCREMENT, KnifePosData::mval, KnifeTool_OpData::mval, KnifeTool_OpData::prev, snap_v2_angle(), and sub_v2_v2v2().
Referenced by knife_snap_update_from_mval().
|
static |
Definition at line 3710 of file editmesh_knife.cc.
References BLI_assert, KnifePosData::bmface, KnifePosData::cage, copy_v2_v2(), copy_v3_v3(), KnifeTool_OpData::curr, ViewContext::depsgraph, ED_view3d_win_to_ray_clipped(), KnifePosData::edge, KnifeTool_OpData::ignore_edge_snapping, KnifeTool_OpData::ignore_vert_snapping, isect_line_plane_v3(), knife_find_closest_edge_of_face(), knife_find_closest_face(), knife_find_closest_vert_of_edge(), knife_input_ray_segment(), knife_pos_data_clear(), KnifePosData::mval, KnifePosData::ob_index, KnifeTool_OpData::prev, KnifeTool_OpData::region, ViewContext::rv3d, ViewContext::v3d, KnifeTool_OpData::vc, KnifePosData::vert, and RegionView3D::viewinv.
Referenced by knife_snap_update_from_mval(), and knife_start_cut().
|
static |
kcd->curr must be up to date. Definition at line 3206 of file editmesh_knife.cc.
References BLI_assert, KnifePosData::bmface, KnifePosData::cage, KnifeTool_OpData::curr, float, KnifeTool_OpData::is_interactive, KnifePosData::is_space(), knife_sample_screen_density_from_closest_face(), min_ff(), and KnifePosData::ob_index.
Referenced by knife_find_closest_edge_of_face(), and knife_find_closest_vert_of_edge().
|
static |
kcd->curr.co & kcd->curr.cage are set.In this case is_space is nearly always false. There are some situations when vertex or edge can be snapped to, when is_space is true. In this case the selection-buffer is used to select the face, then the closest vert or edge is set, and those will enable is_co_set.
Definition at line 3768 of file editmesh_knife.cc.
References KnifeTool_OpData::angle_snapping, KnifeTool_OpData::angle_snapping_mode, KnifeTool_OpData::axis_constrained, KnifePosData::cage, copy_v2_v2(), KnifeTool_OpData::curr, KnifeTool_OpData::is_angle_snapping, KNF_CONSTRAIN_ANGLE_MODE_RELATIVE, KNF_CONSTRAIN_ANGLE_MODE_SCREEN, knife_calculate_snap_ref_edges(), knife_constrain_axis(), knife_pos_data_clear(), knife_project_v2(), knife_snap_angle_relative(), knife_snap_angle_screen(), knife_snap_curr(), KnifeTool_OpData::mode, MODE_DRAGGING, KnifePosData::mval, KnifeTool_OpData::mval, KnifeTool_OpData::prev, and KnifeTool_OpData::snap_ref_edges_count.
Referenced by knife_update_active().
|
static |
Definition at line 1758 of file editmesh_knife.cc.
References KnifeEdge::basef, BLI_addtail(), BLI_remlink(), BLI_stack_push(), LinkData::data, KnifeEdge::e, KnifeVert::edges, KnifeEdge::faces, KnifeVert::faces, find_ref(), KnifeEdge::is_cut, KnifeVert::is_cut, KnifeVert::is_splitting, knife_add_edge_faces_to_vert(), knife_add_to_vert_edges(), knife_append_list(), knife_edge_append_face(), knife_find_common_face(), LISTBASE_FOREACH, new_knife_edge(), new_knife_vert(), KnifeVert::ob_index, KnifeEdge::splits, KnifeUndoFrame::splits, KnifeTool_OpData::splitstack, KnifeTool_OpData::undo, KnifeEdge::v1, and KnifeEdge::v2.
Referenced by knife_add_single_cut().
|
static |
Definition at line 1838 of file editmesh_knife.cc.
References KnifeTool_OpData::curr, KnifeMeasureData::is_stored, knife_snap_curr(), KnifeTool_OpData::mdata, and KnifeTool_OpData::prev.
Referenced by EDBM_mesh_knife(), and knifetool_modal().
|
static |
Update active knife edge/vert pointers.
Definition at line 4097 of file editmesh_knife.cc.
References knife_find_line_hits(), knife_snap_update_from_mval(), KnifeTool_OpData::mode, MODE_DRAGGING, and KnifeTool_OpData::mval.
Referenced by knifetool_modal(), and knifetool_update_mval().
|
static |
Definition at line 1100 of file editmesh_knife.cc.
References KnifeTool_OpData::angle, KnifeTool_OpData::angle_snapping, KnifeTool_OpData::angle_snapping_increment, KnifeTool_OpData::angle_snapping_mode, KnifeTool_OpData::constrain_axis, KnifeTool_OpData::cut_through, KnifeTool_OpData::depth_test, IFACE_, KnifeTool_OpData::ignore_edge_snapping, WorkspaceStatus::item(), KNF_CONSTRAIN_ANGLE_MODE_RELATIVE, KNF_CONSTRAIN_ANGLE_MODE_SCREEN, KNF_MODAL_ADD_CUT, KNF_MODAL_ADD_CUT_CLOSED, KNF_MODAL_ANGLE_SNAP_TOGGLE, KNF_MODAL_CANCEL, KNF_MODAL_CONFIRM, KNF_MODAL_CUT_THROUGH_TOGGLE, KNF_MODAL_CYCLE_ANGLE_SNAP_EDGE, KNF_MODAL_DEPTH_TEST_TOGGLE, KNF_MODAL_IGNORE_SNAP_ON, KNF_MODAL_MIDPOINT_ON, KNF_MODAL_NEW_CUT, KNF_MODAL_PANNING, KNF_MODAL_SHOW_DISTANCE_ANGLE_TOGGLE, KNF_MODAL_UNDO, KNF_MODAL_X_AXIS, KNF_MODAL_Y_AXIS, KNF_MODAL_Z_AXIS, KNIFE_DEFAULT_ANGLE_SNAPPING_INCREMENT, KNIFE_MAX_ANGLE_SNAPPING_INCREMENT, KNIFE_MIN_ANGLE_SNAPPING_INCREMENT, WorkspaceStatus::opmodal(), RAD2DEGF, KnifeTool_OpData::show_dist_angle, KnifeTool_OpData::snap_midpoints, wmOperator::type, and WM_modalkeymap_operator_items_to_string().
Referenced by knifetool_invoke(), and knifetool_modal().
Definition at line 1468 of file editmesh_knife.cc.
References BM_face_point_inside_test(), BM_face_vert_share_loop(), BM_loop_is_adjacent(), BMVert::co, KnifeVert::co, false, mid_v3_v3v3(), KnifeVert::v, and v2.
Referenced by knife_add_single_cut().
|
static |
Definition at line 4175 of file editmesh_knife.cc.
References knifetool_exit().
Referenced by knifetool_invoke(), and MESH_OT_knife_tool().
|
static |
Definition at line 4229 of file editmesh_knife.cc.
References KnifeTool_OpData::angle_snapping, KnifeTool_OpData::angle_snapping_mode, KnifeTool_OpData::is_angle_snapping, and KNF_CONSTRAIN_ANGLE_MODE_NONE.
Referenced by knifetool_modal().
|
static |
Definition at line 4237 of file editmesh_knife.cc.
References KnifeTool_OpData::axis_constrained, KnifeTool_OpData::constrain_axis, KnifeTool_OpData::constrain_axis_mode, and KNF_CONSTRAIN_AXIS_MODE_NONE.
Referenced by knifetool_modal().
Definition at line 892 of file editmesh_knife.cc.
References KnifeTool_OpData::angle_snapping_mode, KnifeTool_OpData::axis_constrained, batch, BLI_mempool_iternew(), BLI_mempool_iterstep(), BLI_mempool_len(), KnifePosData::bmface, KnifePosData::cage, KnifeVert::cageco, KnifeTool_OpData::colors, KnifeColors::curpoint, KnifeColors::curpoint_a, KnifeTool_OpData::curr, KnifeTool_OpData::depth_test, KnifeColors::edge, KnifePosData::edge, KnifeColors::edge_extra, GPU_batch_create_ex(), GPU_batch_discard(), GPU_batch_draw(), GPU_batch_draw_range(), GPU_BATCH_OWNS_VBO, GPU_batch_program_set_builtin(), GPU_batch_uniform_4fv, GPU_blend(), GPU_BLEND_ALPHA, GPU_BLEND_NONE, GPU_COMP_F32, GPU_DEPTH_LESS_EQUAL, GPU_DEPTH_NONE, GPU_depth_test(), GPU_FETCH_FLOAT, GPU_line_width(), GPU_matrix_pop_projection(), GPU_matrix_push_projection(), GPU_point_size(), GPU_polygon_offset(), GPU_PRIM_LINES, GPU_PRIM_POINTS, GPU_SHADER_3D_UNIFORM_COLOR, GPU_vertbuf_attr_set(), GPU_vertbuf_create_with_format, GPU_vertbuf_data_alloc(), GPU_vertformat_attr_add(), immBegin(), immBeginBatchAtMost(), immBindBuiltinProgram(), immEnd(), immUnbindProgram(), immUniformColor3ubv(), immVertex3fv(), immVertexFormat(), KnifeTool_OpData::is_angle_snapping, KnifeEdge::is_cut, KnifeVert::is_cut, KnifeEdge::is_invalid, KnifeVert::is_invalid, KnifeTool_OpData::kedges, KNF_CONSTRAIN_ANGLE_MODE_RELATIVE, knifetool_draw_angle_snapping(), knifetool_draw_dist_angle(), knifetool_draw_orientation_locking(), KnifeTool_OpData::kverts, KnifeColors::line, KnifeTool_OpData::linehits, KnifeTool_OpData::mode, MODE_DRAGGING, KnifeColors::point, KnifeColors::point_a, pos, KnifeTool_OpData::prev, rgba_uchar_to_float(), KnifeTool_OpData::show_dist_angle, blender::Vector< T, InlineBufferCapacity, Allocator >::size(), KnifeTool_OpData::snap_ref_edge, KnifeTool_OpData::totkedge, KnifeTool_OpData::totkvert, UI_SCALE_FAC, KnifeEdge::v1, KnifeEdge::v2, and KnifePosData::vert.
Referenced by knifetool_init().
|
static |
Definition at line 561 of file editmesh_knife.cc.
References angle_normalized_v3v3(), axis_angle_to_quat(), B_UNIT_ROTATION, BKE_unit_value_as_string(), BLF_color3ubv(), BLF_disable(), BLF_draw(), BLF_enable(), blf_mono_font, BLF_position(), BLF_ROTATION, BLF_rotation(), BLF_size(), BLF_width_and_height(), BLI_STR_UTF8_DEGREE_SIGN, KnifeTool_OpData::bvh, copy_v3_v3(), cross_v3_v3v3(), ED_view3d_pixel_size_no_ui_scale(), GPU_blend(), GPU_BLEND_ALPHA, GPU_BLEND_NONE, GPU_COMP_F32, GPU_FETCH_FLOAT, GPU_line_width(), GPU_matrix_identity_set(), GPU_matrix_pop(), GPU_matrix_pop_projection(), GPU_matrix_push(), GPU_matrix_push_projection(), GPU_PRIM_LINE_STRIP, GPU_SHADER_3D_UNIFORM_COLOR, GPU_vertformat_attr_add(), immBegin(), immBindBuiltinProgram(), immEnd(), immRectf(), immUnbindProgram(), immUniformColor4fv(), immUniformThemeColor3(), immVertex3fv(), immVertexFormat(), len_v2v2(), madd_v3_v3v3fl(), min_fff(), mul_qt_v3(), normalize_v3(), KnifeBVH::ob_index, KnifeTool_OpData::objects, RAD2DEGF, KnifeTool_OpData::region, ARegion::regiondata, KnifeTool_OpData::scene, SNPRINTF, sub_v3_v3v3(), TH_TEXT, TH_WIRE, UI_GetThemeColor3ubv(), UI_SCALE_FAC, Scene::unit, USER_UNIT_NONE, and wmOrtho2_region_pixelspace().
Referenced by knifetool_draw_visible_angles().
|
static |
Definition at line 428 of file editmesh_knife.cc.
References GPU_COMP_F32, GPU_FETCH_FLOAT, GPU_line_width(), GPU_PRIM_LINES, GPU_SHADER_3D_UNIFORM_COLOR, GPU_vertformat_attr_add(), immBegin(), immBindBuiltinProgram(), immEnd(), immUnbindProgram(), immUniformThemeColor3(), immVertex3fv(), immVertexFormat(), knifetool_raycast_planes(), pos, TH_TRANSFORM, and v2.
Referenced by knifetool_draw().
|
static |
Definition at line 872 of file editmesh_knife.cc.
References KnifeTool_OpData::dist_angle_mode, KNF_MEASUREMENT_ANGLE, KNF_MEASUREMENT_BOTH, KNF_MEASUREMENT_DISTANCE, knifetool_draw_visible_angles(), and knifetool_draw_visible_distances().
Referenced by knifetool_draw().
|
static |
Definition at line 448 of file editmesh_knife.cc.
References KnifeColors::axis_extra, KnifePosData::cage, KnifeTool_OpData::colors, compare_v3v3(), KnifeTool_OpData::constrain_axis, KnifeTool_OpData::curr, GPU_COMP_F32, GPU_FETCH_FLOAT, GPU_line_width(), GPU_PRIM_LINES, GPU_SHADER_3D_UNIFORM_COLOR, GPU_vertformat_attr_add(), immBegin(), immBindBuiltinProgram(), immEnd(), immUnbindProgram(), immUniformColor3ubv(), immVertex3fv(), immVertexFormat(), KNF_CONSTRAIN_AXIS_X, KNF_CONSTRAIN_AXIS_Y, KNF_CONSTRAIN_AXIS_Z, KNIFE_FLT_EPSBIG, knifetool_raycast_planes(), pos, KnifeTool_OpData::prev, v2, KnifeColors::xaxis, KnifeColors::yaxis, and KnifeColors::zaxis.
Referenced by knifetool_draw().
|
static |
Definition at line 693 of file editmesh_knife.cc.
References angle(), KnifeTool_OpData::angle_snapping_mode, angle_v3v3v3(), KnifeMeasureData::cage, KnifePosData::cage, KnifeVert::cageco, compare_v3v3(), KnifeTool_OpData::curr, ED_view3d_project_float_global(), KnifePosData::edge, KnifeVert::edges, ListBase::first, FLT_MAX, KnifeTool_OpData::is_angle_snapping, KnifeVert::is_cut, KnifePosData::is_space(), KnifeMeasureData::is_stored, KNF_CONSTRAIN_ANGLE_MODE_RELATIVE, KNIFE_FLT_EPSBIG, knifetool_draw_angle(), LISTBASE_FOREACH, KnifeTool_OpData::mdata, KnifeMeasureData::mval, KnifePosData::mval, KnifeTool_OpData::prev, KnifeTool_OpData::region, KnifeTool_OpData::snap_ref_edge, KnifeVert::v, KnifeEdge::v1, KnifeEdge::v2, V3D_PROJ_TEST_NOP, and KnifePosData::vert.
Referenced by knifetool_draw_dist_angle().
|
static |
Definition at line 491 of file editmesh_knife.cc.
References B_UNIT_LENGTH, BKE_unit_value_as_string(), BLF_color3ubv(), BLF_disable(), BLF_draw(), BLF_enable(), blf_mono_font, BLF_position(), BLF_ROTATION, BLF_rotation(), BLF_size(), BLF_width_and_height(), KnifePosData::cage, KnifeTool_OpData::curr, GPU_blend(), GPU_BLEND_ALPHA, GPU_BLEND_NONE, GPU_COMP_F32, GPU_FETCH_FLOAT, GPU_matrix_identity_set(), GPU_matrix_pop(), GPU_matrix_pop_projection(), GPU_matrix_push(), GPU_matrix_push_projection(), GPU_SHADER_3D_UNIFORM_COLOR, GPU_vertformat_attr_add(), immBindBuiltinProgram(), immRectf(), immUnbindProgram(), immUniformColor4fv(), immVertexFormat(), len_v3v3(), mid_v2_v2v2(), KnifePosData::mval, pos, KnifeTool_OpData::prev, KnifeTool_OpData::region, KnifeTool_OpData::scene, SNPRINTF, TH_TEXT, UI_GetThemeColor3ubv(), UI_SCALE_FAC, Scene::unit, USER_UNIT_NONE, and wmOrtho2_region_pixelspace().
Referenced by knifetool_draw_dist_angle().
|
static |
Definition at line 4083 of file editmesh_knife.cc.
References wmOperator::customdata, and knifetool_exit_ex().
Referenced by knifetool_cancel(), and knifetool_modal().
|
static |
Definition at line 4041 of file editmesh_knife.cc.
References KnifeTool_OpData::arena, BLI_ghash_free(), BLI_gset_free(), BLI_memarena_free(), BLI_mempool_destroy(), BLI_stack_free(), KnifeTool_OpData::draw_handle, ED_region_draw_cb_exit(), ED_region_tag_redraw(), KnifeTool_OpData::edge_visit, KnifeTool_OpData::edgenet, KnifeTool_OpData::facetrimap, KnifeTool_OpData::is_interactive, KnifeTool_OpData::kedgefacemap, KnifeTool_OpData::kedges, knife_bvh_free(), KnifeTool_OpData::kverts, KnifeTool_OpData::origedgemap, KnifeTool_OpData::origvertmap, KnifeTool_OpData::refs, KnifeTool_OpData::region, KnifeTool_OpData::splitstack, ARegion::type, KnifeTool_OpData::undostack, KnifeTool_OpData::vc, ViewContext::win, and WM_cursor_modal_restore().
Referenced by EDBM_mesh_knife(), and knifetool_exit().
|
static |
Definition at line 4163 of file editmesh_knife.cc.
References wmOperator::customdata, and knifetool_finish_ex().
Referenced by knifetool_modal().
|
static |
Definition at line 4150 of file editmesh_knife.cc.
References blender::Vector< T, InlineBufferCapacity, Allocator >::index_range(), knifetool_finish_single_post(), knifetool_finish_single_pre(), and KnifeTool_OpData::objects.
Referenced by knifetool_finish().
|
static |
A post version is needed to delay recalculating tessellation after making cuts. Without this, knife-project can't use the BVH tree to select geometry after a cut, see: #98349.
Definition at line 4138 of file editmesh_knife.cc.
References BKE_editmesh_from_object(), Object::data, EDBM_selectmode_flush(), EDBM_update(), and params.
Referenced by EDBM_mesh_knife(), and knifetool_finish_ex().
|
static |
Definition at line 4129 of file editmesh_knife.cc.
References knife_make_cuts().
Referenced by EDBM_mesh_knife(), and knifetool_finish_ex().
|
static |
Definition at line 3943 of file editmesh_knife.cc.
References KnifeTool_OpData::angle_snapping, KnifeTool_OpData::angle_snapping_increment, KnifeTool_OpData::angle_snapping_mode, KnifeTool_OpData::arena, KnifeTool_OpData::axis_string, B_UNIT_NONE, BKE_editmesh_from_object(), BLI_ghash_ptr_new(), BLI_gset_ptr_new(), BLI_memarena_new(), BLI_MEMPOOL_ALLOW_ITER, BLI_mempool_create(), BLI_stack_new, KnifeTool_OpData::colors, KnifeTool_OpData::curr, KnifeTool_OpData::cut_through, KnifeTool_OpData::depth_test, KnifeTool_OpData::dist_angle_mode, KnifeTool_OpData::draw_handle, ED_region_draw_cb_activate(), ED_region_tag_redraw(), KnifeTool_OpData::edge_visit, KnifeTool_OpData::edgenet, KnifeTool_OpData::ethresh, KnifeTool_OpData::facetrimap, NumInput::idx_max, initNumInput(), KnifeTool_OpData::is_interactive, KnifeTool_OpData::kedgefacemap, KnifeTool_OpData::kedges, KMAXDIST, KNF_CONSTRAIN_ANGLE_MODE_NONE, KNF_MEASUREMENT_NONE, knife_bvh_init(), knife_init_colors(), knife_pos_data_clear(), knife_recalc_ortho(), knifetool_draw(), knifetool_init_obinfo(), KnifeTool_OpData::kverts, MEM_SIZE_OPTIMAL, KnifeTool_OpData::no_cuts, KnifeTool_OpData::num, NUM_NO_NEGATIVE, KnifeTool_OpData::objects, KnifeTool_OpData::objects_info, KnifeTool_OpData::only_select, KnifeTool_OpData::origedgemap, KnifeTool_OpData::origvertmap, KnifeTool_OpData::prev, KnifeTool_OpData::refs, KnifeTool_OpData::region, ViewContext::region, REGION_DRAW_POST_VIEW, blender::Array< T, InlineBufferCapacity, Allocator >::reinitialize(), SCE_SELECT_FACE, KnifeTool_OpData::scene, scene, ViewContext::scene, KnifeTool_OpData::select_result, BMEditMesh::selectmode, KnifeTool_OpData::show_dist_angle, blender::Vector< T, InlineBufferCapacity, Allocator >::size(), KnifeTool_OpData::splitstack, ARegion::type, KnifeTool_OpData::undostack, NumInput::unit_sys, NumInput::unit_type, NumInput::val_flag, KnifeTool_OpData::vc, and KnifeTool_OpData::vthresh.
Referenced by EDBM_mesh_knife(), and knifetool_invoke().
|
static |
Definition at line 3887 of file editmesh_knife.cc.
References BKE_editmesh_from_object(), BKE_editmesh_vert_coords_alloc(), BMEditMesh::bm, BM_elem_index_get, BM_mesh_elem_index_ensure(), BM_VERT, DEG_get_evaluated_id(), ViewContext::depsgraph, KnifeObjectInfo::em, Object::id, Scene::id, BMEditMesh::looptris, KnifeTool_OpData::objects_info, KnifeObjectInfo::positions_cage, KnifeTool_OpData::scene, blender::Array< T, InlineBufferCapacity, Allocator >::size(), KnifeObjectInfo::tri_indices, v, and KnifeTool_OpData::vc.
Referenced by knifetool_init().
|
static |
Definition at line 4611 of file editmesh_knife.cc.
References BKE_editmesh_from_object(), BKE_report(), BKE_view_layer_array_from_objects_in_edit_mode_unique_data(), BLI_assert, BMEditMesh::bm, copy_v2_v2_int(), CTX_wm_window(), wmOperator::customdata, em_setup_viewcontext(), EVT_MODAL_MAP, wmOperator::flag, KM_NOTHING, KNF_MODAL_ADD_CUT, knife_update_header(), knifetool_cancel(), knifetool_init(), knifetool_modal(), wmEvent::mval, KnifeTool_OpData::objects, OP_IS_MODAL_CURSOR_REGION, OPERATOR_CANCELLED, OPERATOR_RUNNING_MODAL, wmEvent::prev_val, wmOperator::ptr, RAD2DEGF, wmOperator::reports, ret, RNA_boolean_get(), RNA_enum_get(), RNA_float_get(), RPT_ERROR, ViewContext::scene, BMesh::totfacesel, UNUSED_VARS_NDEBUG, ViewContext::v3d, ViewContext::view_layer, WM_CURSOR_KNIFE, WM_cursor_modal_set(), and WM_event_add_modal_handler().
Referenced by MESH_OT_knife_tool().
|
static |
Definition at line 4244 of file editmesh_knife.cc.
References KnifeTool_OpData::angle_snapping, KnifeTool_OpData::angle_snapping_increment, KnifeTool_OpData::angle_snapping_mode, applyNumInput(), KnifeTool_OpData::axis_constrained, KnifeTool_OpData::axis_string, BLI_stack_is_empty(), KnifePosData::cage, KnifeTool_OpData::constrain_axis, KnifeTool_OpData::constrain_axis_mode, KnifeTool_OpData::curr, wmOperator::customdata, KnifeTool_OpData::cut_through, KnifeTool_OpData::depth_test, KnifeTool_OpData::dist_angle_mode, ED_region_tag_redraw(), ED_view3d_init_mats_rv3d(), ED_workspace_status_text(), ELEM, EVT_MODAL_MAP, wmOperator::flag, handleNumInput(), hasNumInput(), KnifeTool_OpData::ignore_edge_snapping, KnifeTool_OpData::ignore_vert_snapping, KnifeTool_OpData::init, KnifeTool_OpData::is_drag_hold, KnifeTool_OpData::is_drag_undo, KM_PRESS, KM_RELEASE, KNF_CONSTRAIN_ANGLE_MODE_NONE, KNF_CONSTRAIN_ANGLE_MODE_RELATIVE, KNF_CONSTRAIN_AXIS_MODE_GLOBAL, KNF_CONSTRAIN_AXIS_MODE_LOCAL, KNF_CONSTRAIN_AXIS_MODE_NONE, KNF_CONSTRAIN_AXIS_NONE, KNF_CONSTRAIN_AXIS_X, KNF_CONSTRAIN_AXIS_Y, KNF_CONSTRAIN_AXIS_Z, KNF_MEASUREMENT_ANGLE, KNF_MEASUREMENT_NONE, KNF_MODAL_ADD_CUT, KNF_MODAL_ADD_CUT_CLOSED, KNF_MODAL_ANGLE_SNAP_TOGGLE, KNF_MODAL_CANCEL, KNF_MODAL_CONFIRM, KNF_MODAL_CUT_THROUGH_TOGGLE, KNF_MODAL_CYCLE_ANGLE_SNAP_EDGE, KNF_MODAL_DEPTH_TEST_TOGGLE, KNF_MODAL_IGNORE_SNAP_OFF, KNF_MODAL_IGNORE_SNAP_ON, KNF_MODAL_MIDPOINT_OFF, KNF_MODAL_MIDPOINT_ON, KNF_MODAL_NEW_CUT, KNF_MODAL_PANNING, KNF_MODAL_SHOW_DISTANCE_ANGLE_TOGGLE, KNF_MODAL_UNDO, KNF_MODAL_X_AXIS, KNF_MODAL_Y_AXIS, KNF_MODAL_Z_AXIS, knife_add_cut(), knife_finish_cut(), KNIFE_MAX_ANGLE_SNAPPING_INCREMENT, KNIFE_MIN_ANGLE_SNAPPING_INCREMENT, knife_project_v2(), knife_recalc_ortho(), knife_reset_snap_angle_input(), knife_start_cut(), knife_update_active(), knife_update_header(), knifetool_disable_angle_snapping(), knifetool_disable_orientation_locking(), knifetool_exit(), knifetool_finish(), knifetool_undo(), knifetool_update_mval(), knifetool_update_mval_i(), KnifeTool_OpData::linehits, KnifeTool_OpData::mode, MODE_DRAGGING, MODE_IDLE, MODE_PANNING, MOUSEMOVE, MOUSEPAN, MOUSEROTATE, MOUSEZOOM, KnifePosData::mval, wmEvent::mval, NDOF_MOTION, KnifeTool_OpData::no_cuts, KnifeTool_OpData::num, KnifePosData::ob_index, OB_MESH, ViewContext::obedit, KnifeTool_OpData::objects, OP_IS_MODAL_CURSOR_REGION, OPERATOR_CANCELLED, OPERATOR_FINISHED, OPERATOR_PASS_THROUGH, OPERATOR_RUNNING_MODAL, KnifeTool_OpData::prev, wmEvent::prev_val, KnifeTool_OpData::prevmode, wmOperator::ptr, RAD2DEGF, KnifeTool_OpData::region, ViewContext::region, RNA_float_get(), ViewContext::rv3d, KnifeTool_OpData::show_dist_angle, blender::Vector< T, InlineBufferCapacity, Allocator >::size(), KnifeTool_OpData::snap_edge, KnifeTool_OpData::snap_midpoints, KnifeTool_OpData::snap_ref_edges_count, NumInput::str_cur, KnifeTool_OpData::totkvert, Object::type, wmEvent::type, KnifeTool_OpData::undostack, wmEvent::val, KnifeTool_OpData::vc, WHEELDOWNMOUSE, and WHEELUPMOUSE.
Referenced by knifetool_invoke(), and MESH_OT_knife_tool().
| wmKeyMap * knifetool_modal_keymap | ( | wmKeyConfig * | keyconf | ) |
Definition at line 4181 of file editmesh_knife.cc.
References KNF_MODAL_ADD_CUT, KNF_MODAL_ADD_CUT_CLOSED, KNF_MODAL_ANGLE_SNAP_TOGGLE, KNF_MODAL_CANCEL, KNF_MODAL_CONFIRM, KNF_MODAL_CUT_THROUGH_TOGGLE, KNF_MODAL_CYCLE_ANGLE_SNAP_EDGE, KNF_MODAL_DEPTH_TEST_TOGGLE, KNF_MODAL_IGNORE_SNAP_OFF, KNF_MODAL_IGNORE_SNAP_ON, KNF_MODAL_MIDPOINT_OFF, KNF_MODAL_MIDPOINT_ON, KNF_MODAL_NEW_CUT, KNF_MODAL_PANNING, KNF_MODAL_SHOW_DISTANCE_ANGLE_TOGGLE, KNF_MODAL_UNDO, KNF_MODAL_X_AXIS, KNF_MODAL_Y_AXIS, KNF_MODAL_Z_AXIS, wmKeyMap::modal_items, WM_modalkeymap_assign(), WM_modalkeymap_ensure(), and WM_modalkeymap_find().
Referenced by ED_keymap_mesh().
|
static |
Definition at line 380 of file editmesh_knife.cc.
References KnifePosData::cage, copy_v3_v3(), KnifeTool_OpData::curr, ED_view3d_win_to_3d(), FLT_MAX, isect_ray_plane_v3(), madd_v3_v3v3fl(), KnifePosData::mval, RegionView3D::persmat, planes_from_projmat(), KnifeTool_OpData::prev, KnifeTool_OpData::region, ViewContext::rv3d, sub_v3_v3v3(), UNPACK3, ViewContext::v3d, and KnifeTool_OpData::vc.
Referenced by knifetool_draw_angle_snapping(), and knifetool_draw_orientation_locking().
|
static |
Definition at line 1452 of file editmesh_knife.cc.
References knife_bvh_raycast(), knife_input_ray_segment(), normalize_v3_v3(), and sub_v3_v3v3().
|
static |
TODO: Undo currently assumes that the most recent cut segment added is the last valid KnifeEdge in the kcd->kedges mempool. This could break in the future so it may be better to store the KnifeEdges for each KnifeUndoFrame on a stack. This stack could then be used instead of iterating over the mempool.
Definition at line 3806 of file editmesh_knife.cc.
References BLI_mempool_iternew(), BLI_mempool_iterstep(), BLI_stack_discard(), BLI_stack_peek(), BLI_stack_pop(), KnifeUndoFrame::cuts, KnifeVert::edges, KnifeEdge::is_cut, KnifeEdge::is_invalid, KnifeVert::is_invalid, KnifeVert::is_splitting, KnifeTool_OpData::kedges, knife_join_edge(), LISTBASE_FOREACH, KnifeTool_OpData::mdata, KnifeUndoFrame::mdata, KnifeTool_OpData::mode, MODE_DRAGGING, KnifeUndoFrame::pos, KnifeTool_OpData::prev, KnifeEdge::splits, KnifeUndoFrame::splits, KnifeTool_OpData::splitstack, KnifeTool_OpData::undostack, KnifeEdge::v1, KnifeEdge::v2, and v2.
Referenced by knifetool_modal().
|
static |
Definition at line 4107 of file editmesh_knife.cc.
References copy_v2_v2(), ED_region_tag_redraw(), knife_recalc_ortho(), knife_update_active(), KnifeTool_OpData::mval, and KnifeTool_OpData::region.
Referenced by EDBM_mesh_knife(), knifetool_modal(), and knifetool_update_mval_i().
|
static |
Definition at line 4117 of file editmesh_knife.cc.
References float, and knifetool_update_mval().
Referenced by knifetool_modal().
|
static |
Definition at line 1858 of file editmesh_knife.cc.
References KnifeLineHit::l, KnifeLineHit::m, and KnifeLineHit::v.
Referenced by prepare_linehits_for_cut().
|
static |
Definition at line 1845 of file editmesh_knife.cc.
References KnifePosData::bmface, KnifePosData::cage, KnifeLineHit::cagehit, copy_v2_v2(), copy_v3_v3(), KnifePosData::edge, KnifeLineHit::f, KnifeLineHit::kfe, KnifePosData::mval, KnifeLineHit::schit, KnifeLineHit::v, and KnifePosData::vert.
Referenced by knife_add_cut().
| void MESH_OT_knife_tool | ( | wmOperatorType * | ot | ) |
Definition at line 4680 of file editmesh_knife.cc.
References BLT_I18NCONTEXT_ID_MESH, wmOperatorType::cancel, DEG2RADF, wmOperatorType::description, ED_operator_editmesh_view3d(), wmOperatorType::flag, wmOperatorType::idname, wmOperatorType::invoke, KNF_CONSTRAIN_ANGLE_MODE_NONE, KNF_CONSTRAIN_ANGLE_MODE_RELATIVE, KNF_CONSTRAIN_ANGLE_MODE_SCREEN, KNF_MEASUREMENT_ANGLE, KNF_MEASUREMENT_BOTH, KNF_MEASUREMENT_DISTANCE, KNF_MEASUREMENT_NONE, KNIFE_DEFAULT_ANGLE_SNAPPING_INCREMENT, KNIFE_MAX_ANGLE_SNAPPING_INCREMENT, KNIFE_MIN_ANGLE_SNAPPING_INCREMENT, knifetool_cancel(), knifetool_invoke(), knifetool_modal(), wmOperatorType::modal, wmOperatorType::name, OPTYPE_BLOCKING, OPTYPE_REGISTER, OPTYPE_UNDO, ot, wmOperatorType::poll, PROP_ANGLE, PROP_HIDDEN, PROP_SKIP_SAVE, RNA_def_boolean(), RNA_def_enum(), RNA_def_float(), RNA_def_property_flag(), RNA_def_property_subtype(), RNA_def_property_translation_context(), and wmOperatorType::srna.
Referenced by ED_operatortypes_mesh().
|
static |
Definition at line 1666 of file editmesh_knife.cc.
References BLI_mempool_calloc(), KnifeTool_OpData::kedges, and KnifeTool_OpData::totkedge.
Referenced by get_bm_knife_edge(), knife_add_single_cut(), and knife_split_edge().
|
static |
Definition at line 1654 of file editmesh_knife.cc.
References BLI_mempool_calloc(), KnifeVert::cageco, KnifeVert::co, copy_v3_v3(), KnifeTool_OpData::kverts, and KnifeTool_OpData::totkvert.
Referenced by get_bm_knife_vert(), knife_add_single_cut(), and knife_split_edge().
|
static |
Check if p is visible (not clipped, not occluded by another face). s in screen projection of p.
| ele_test | Optional vert/edge/face to use when p is on the surface of the geometry, intersecting faces matching this face (or connected when an vert/edge) will be ignored. |
Definition at line 2643 of file editmesh_knife.cc.
References bm_ray_cast_cb_elem_not_in_face_check(), View3D::clip_end, RegionView3D::clip_local, clip_segment_v3_plane_n(), copy_v3_v3(), KnifeTool_OpData::cut_through, ED_view3d_clipping_test(), ED_view3d_unproject_v3(), KnifeTool_OpData::is_ortho, knife_bvh_raycast(), knife_bvh_raycast_filter(), KNIFE_FLT_EPS, len_v3v3(), madd_v3_v3v3fl(), normalize_v3(), RegionView3D::persp, ViewContext::region, ViewContext::rv3d, RV3D_CAMOB, RV3D_CLIPPING_ENABLED, sub_v3_v3(), ViewContext::v3d, and KnifeTool_OpData::vc.
Referenced by EDBM_mesh_knife(), knife_find_line_hits(), and knife_linehit_face_test().
|
static |
Definition at line 1886 of file editmesh_knife.cc.
References blender::Vector< T, InlineBufferCapacity, Allocator >::begin(), blender::Vector< T, InlineBufferCapacity, Allocator >::end(), fabsf, blender::Vector< T, InlineBufferCapacity, Allocator >::is_empty(), KnifeLineHit::kfe, KNIFE_FLT_EPSBIG, KnifeLineHit::l, linehit_compare(), KnifeTool_OpData::linehits, KnifeLineHit::m, blender::Vector< T, InlineBufferCapacity, Allocator >::resize(), blender::Vector< T, InlineBufferCapacity, Allocator >::size(), and KnifeLineHit::v.
Referenced by knife_add_cut().
|
static |
Definition at line 2424 of file editmesh_knife.cc.
References BLI_assert, BLI_ghash_insert(), BLI_ghash_lookup(), KnifeTool_OpData::facetrimap, BMEditMesh::looptris, and POINTER_FROM_INT.
Referenced by knife_find_line_hits().
|
static |
Snaps a 2d vector to an angle, relative to v_ref.
Definition at line 3395 of file editmesh_knife.cc.
References angle(), angle_signed_v2v2(), angle_to_mat2(), BLI_ASSERT_UNIT_V2, mul_v2_m2v2(), normalize_v2_v2(), and v.
Referenced by knife_snap_angle_screen().
|
static |
Snaps a 3d vector to an angle, relative to v_ref, along the plane with normal plane_no.
Definition at line 3446 of file editmesh_knife.cc.
References angle(), angle_signed_on_axis_v3v3_v3(), rotate_v3_v3v3fl(), and v.
Referenced by knife_snap_angle_relative().
|
static |
Definition at line 2210 of file editmesh_knife.cc.
References KnifeVert::co, and len_squared_v3v3().
Referenced by knife_make_cuts().