Blender
V3.3
|
#include "MEM_guardedalloc.h"
#include "BLF_api.h"
#include "BLI_alloca.h"
#include "BLI_array.h"
#include "BLI_linklist.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_memarena.h"
#include "BLI_smallhash.h"
#include "BLI_stack.h"
#include "BLI_string.h"
#include "BLT_translation.h"
#include "BKE_bvhutils.h"
#include "BKE_context.h"
#include "BKE_editmesh.h"
#include "BKE_editmesh_bvh.h"
#include "BKE_layer.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_unit.h"
#include "GPU_immediate.h"
#include "GPU_matrix.h"
#include "GPU_state.h"
#include "ED_mesh.h"
#include "ED_numinput.h"
#include "ED_screen.h"
#include "ED_space_api.h"
#include "ED_transform.h"
#include "ED_view3d.h"
#include "WM_api.h"
#include "WM_types.h"
#include "DNA_object_types.h"
#include "UI_interface.h"
#include "UI_resources.h"
#include "RNA_access.h"
#include "RNA_define.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "mesh_intern.h"
Go to the source code of this file.
Classes | |
struct | KnifeColors |
struct | KnifeVert |
struct | Ref |
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 * U.dpi_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 | WM_MODALKEY(_id) |
#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) |
Typedefs | |
typedef struct KnifeColors | KnifeColors |
typedef struct KnifeVert | KnifeVert |
typedef struct Ref | Ref |
typedef struct KnifeEdge | KnifeEdge |
typedef struct KnifeLineHit | KnifeLineHit |
typedef struct KnifePosData | KnifePosData |
typedef struct KnifeMeasureData | KnifeMeasureData |
typedef struct KnifeUndoFrame | KnifeUndoFrame |
typedef struct KnifeBVH | KnifeBVH |
typedef struct KnifeObjectInfo | KnifeObjectInfo |
typedef struct KnifeTool_OpData | KnifeTool_OpData |
Enumerations | |
enum | { KNF_MODAL_CANCEL = 1 , KNF_MODAL_CONFIRM , KNF_MODAL_UNDO , KNF_MODAL_MIDPOINT_ON , KNF_MODAL_MIDPOINT_OFF , KNF_MODAL_NEW_CUT , KNF_MODAL_IGNORE_SNAP_ON , KNF_MODAL_IGNORE_SNAP_OFF , KNF_MODAL_ADD_CUT , KNF_MODAL_ANGLE_SNAP_TOGGLE , KNF_MODAL_CYCLE_ANGLE_SNAP_EDGE , KNF_MODAL_CUT_THROUGH_TOGGLE , KNF_MODAL_SHOW_DISTANCE_ANGLE_TOGGLE , KNF_MODAL_DEPTH_TEST_TOGGLE , KNF_MODAL_PANNING , KNF_MODAL_X_AXIS , KNF_MODAL_Y_AXIS , KNF_MODAL_Z_AXIS , KNF_MODAL_ADD_CUT_CLOSED } |
enum | { KNF_CONSTRAIN_ANGLE_MODE_NONE = 0 , KNF_CONSTRAIN_ANGLE_MODE_SCREEN = 1 , KNF_CONSTRAIN_ANGLE_MODE_RELATIVE = 2 } |
enum | { KNF_CONSTRAIN_AXIS_NONE = 0 , KNF_CONSTRAIN_AXIS_X = 1 , KNF_CONSTRAIN_AXIS_Y = 2 , KNF_CONSTRAIN_AXIS_Z = 3 } |
enum | { KNF_CONSTRAIN_AXIS_MODE_NONE = 0 , KNF_CONSTRAIN_AXIS_MODE_GLOBAL = 1 , KNF_CONSTRAIN_AXIS_MODE_LOCAL = 2 } |
enum | { KNF_MEASUREMENT_NONE = 0 , KNF_MEASUREMENT_BOTH = 1 , KNF_MEASUREMENT_DISTANCE = 2 , KNF_MEASUREMENT_ANGLE = 3 } |
Interactive editmesh knife tool.
Definition in file editmesh_knife.c.
#define F_ISECT_IS_UNKNOWN | ( | f | ) | BM_elem_flag_test(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) |
#define F_ISECT_SET_UNKNOWN | ( | f | ) | BM_elem_flag_enable(BM_FACE_FIRST_LOOP(f), BM_ELEM_TAG) |
Definition at line 69 of file editmesh_knife.c.
#define KNIFE_DEFAULT_ANGLE_SNAPPING_INCREMENT 30.0f |
Definition at line 82 of file editmesh_knife.c.
#define KNIFE_FLT_EPS 0.00001f |
Definition at line 74 of file editmesh_knife.c.
#define KNIFE_FLT_EPS_PX_EDGE 0.05f |
Definition at line 79 of file editmesh_knife.c.
#define KNIFE_FLT_EPS_PX_FACE 0.05f |
Definition at line 80 of file editmesh_knife.c.
#define KNIFE_FLT_EPS_PX_VERT 0.5f |
Definition at line 78 of file editmesh_knife.c.
#define KNIFE_FLT_EPS_SQUARED (KNIFE_FLT_EPS * KNIFE_FLT_EPS) |
Definition at line 75 of file editmesh_knife.c.
#define KNIFE_FLT_EPSBIG 0.0005f |
Definition at line 76 of file editmesh_knife.c.
#define KNIFE_MAX_ANGLE_SNAPPING_INCREMENT 180.0f |
Definition at line 84 of file editmesh_knife.c.
#define KNIFE_MIN_ANGLE_SNAPPING_INCREMENT 0.0f |
Definition at line 83 of file editmesh_knife.c.
#define USE_NET_ISLAND_CONNECT |
Definition at line 67 of file editmesh_knife.c.
#define WM_MODALKEY | ( | _id | ) |
typedef struct KnifeColors KnifeColors |
typedef struct KnifeLineHit KnifeLineHit |
typedef struct KnifeMeasureData KnifeMeasureData |
typedef struct KnifeObjectInfo KnifeObjectInfo |
Additional per-object data.
typedef struct KnifePosData KnifePosData |
typedef struct KnifeTool_OpData KnifeTool_OpData |
typedef struct KnifeUndoFrame KnifeUndoFrame |
anonymous enum |
Definition at line 322 of file editmesh_knife.c.
anonymous enum |
Enumerator | |
---|---|
KNF_CONSTRAIN_ANGLE_MODE_NONE | |
KNF_CONSTRAIN_ANGLE_MODE_SCREEN | |
KNF_CONSTRAIN_ANGLE_MODE_RELATIVE |
Definition at line 344 of file editmesh_knife.c.
anonymous enum |
Enumerator | |
---|---|
KNF_CONSTRAIN_AXIS_NONE | |
KNF_CONSTRAIN_AXIS_X | |
KNF_CONSTRAIN_AXIS_Y | |
KNF_CONSTRAIN_AXIS_Z |
Definition at line 350 of file editmesh_knife.c.
anonymous enum |
Enumerator | |
---|---|
KNF_CONSTRAIN_AXIS_MODE_NONE | |
KNF_CONSTRAIN_AXIS_MODE_GLOBAL | |
KNF_CONSTRAIN_AXIS_MODE_LOCAL |
Definition at line 357 of file editmesh_knife.c.
anonymous enum |
Enumerator | |
---|---|
KNF_MEASUREMENT_NONE | |
KNF_MEASUREMENT_BOTH | |
KNF_MEASUREMENT_DISTANCE | |
KNF_MEASUREMENT_ANGLE |
Definition at line 363 of file editmesh_knife.c.
|
static |
Definition at line 2042 of file editmesh_knife.c.
References BLI_ghash_insert(), BLI_ghash_lookup(), knife_append_list_no_dup(), and knife_empty_list().
Referenced by knife_add_cut().
Definition at line 1614 of file editmesh_knife.c.
References KnifeEdge::basef, KnifeEdge::e, if(), and NULL.
Referenced by knife_find_line_hits().
Definition at line 1574 of file editmesh_knife.c.
References BLI_listbase_is_single(), KnifeEdge::e, KnifeVert::edges, KnifeEdge::faces, ListBase::first, if(), Ref::next, NULL, Ref::ref, and KnifeVert::v.
Referenced by knife_find_line_hits().
Definition at line 2701 of file editmesh_knife.c.
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(), e, and user_data.
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 2645 of file editmesh_knife.c.
References usdtokens::b(), BKE_editmesh_from_object(), BMEditMesh::bm, BM_ITER_MESH, BM_VERTS_OF_MESH, KnifeObjectInfo::cagecos, BMVert::co, copy_v3_v3(), float(), INIT_MINMAX, len_v3v3(), max, mid_v3_v3v3(), min, minmax_v3v3_v3(), mul_m4_v3(), KnifeTool_OpData::objects, KnifeTool_OpData::objects_info, KnifeTool_OpData::objects_len, Object::obmat, KnifeTool_OpData::ortho_extent, KnifeTool_OpData::ortho_extent_center, BMesh::totvert, and v.
Referenced by knife_find_line_hits().
|
static |
Definition at line 2817 of file editmesh_knife.c.
References add_v3_v3(), center, closest(), madd_v3_v3v3fl(), normalize_v3(), project_plane_normalized_v3_v3v3(), sub_v3_v3(), sub_v3_v3v3(), v1, and v2.
Referenced by knife_find_line_hits().
Definition at line 2681 of file editmesh_knife.c.
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 | ( | struct ViewContext * | vc, |
struct Object ** | objects, | ||
int | objects_len, | ||
struct LinkNode * | polys, | ||
bool | use_tag, | ||
bool | cut_through | ||
) |
use_tag | When set, tag all faces inside the polylines. |
Definition at line 4966 of file editmesh_knife.c.
References usdtokens::b(), BKE_editmesh_from_object(), BMEditMesh::bm, 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, 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, MEM_callocN, KnifeTool_OpData::mode, mul_m4_v3(), LinkNode::next, BMLoop::next, NULL, KnifeTool_OpData::objects, KnifeTool_OpData::objects_len, Object::obmat, point_is_visible(), and BMLoop::radial_next.
Referenced by knifeproject_exec().
Definition at line 4948 of file editmesh_knife.c.
References float(), isect_point_poly_v2(), LinkNode::link, MEM_allocN_len, and LinkNode::next.
Referenced by EDBM_mesh_knife().
Definition at line 1651 of file editmesh_knife.c.
References ListBase::first, Ref::next, NULL, and Ref::ref.
Referenced by knife_add_single_cut(), knife_append_list_no_dup(), knife_make_cuts(), and knife_split_edge().
|
static |
Definition at line 1764 of file editmesh_knife.c.
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 1730 of file editmesh_knife.c.
References KnifeVert::base_index, BLI_ghash_insert(), BLI_ghash_lookup(), BM_elem_index_get, BM_FACES_OF_VERT, BM_ITER_ELEM, KnifeObjectInfo::cagecos, BMVert::co, KnifeVert::faces, knife_append_list(), mul_v3_m4v3(), new_knife_vert(), KnifeVert::ob, KnifeTool_OpData::objects_info, Object::obmat, KnifeTool_OpData::origvertmap, v, and KnifeVert::v.
Referenced by get_bm_knife_edge().
|
static |
Definition at line 2549 of file editmesh_knife.c.
References BLI_assert, BLI_ghash_lookup(), KnifeTool_OpData::facetrimap, and POINTER_AS_INT.
Referenced by knife_ray_intersect_face().
|
static |
Definition at line 2414 of file editmesh_knife.c.
References add_hit_to_facehits(), BLI_ghash_free(), BLI_ghash_ptr_new(), BLI_ghashIterator_getKey(), BLI_ghashIterator_getValue(), BLI_stack_push_r(), KnifePosData::bmface, KnifePosData::cage, KnifeMeasureData::cage, KnifeLineHit::cagehit, copy_v2_v2(), copy_v3_v3(), KnifeTool_OpData::curr, KnifeUndoFrame::cuts, KnifeLineHit::f, KnifeVert::faces, KnifeEdge::faces, ListBase::first, GHASH_ITER, KnifeTool_OpData::is_drag_hold, KnifeTool_OpData::is_drag_undo, KnifeMeasureData::is_stored, KnifeLineHit::kfe, knife_cut_face(), linehit_to_knifepos(), KnifeTool_OpData::linehits, KnifeUndoFrame::mdata, KnifeTool_OpData::mdata, MEM_freeN, KnifePosData::mval, KnifeMeasureData::mval, NULL, KnifeUndoFrame::pos, prepare_linehits_for_cut(), KnifeTool_OpData::prev, r, KnifeUndoFrame::splits, KnifeTool_OpData::totlinehit, KnifeTool_OpData::undo, KnifeTool_OpData::undostack, KnifeLineHit::v, and KnifePosData::vert.
Referenced by EDBM_mesh_knife(), and knifetool_modal().
|
static |
Definition at line 1678 of file editmesh_knife.c.
References BM_FACES_OF_EDGE, BM_ITER_ELEM, e, KnifeVert::faces, and knife_append_list().
Referenced by knife_split_edge().
|
static |
Definition at line 2083 of file editmesh_knife.c.
References KnifeVert::base_index, KnifeLineHit::base_index, KnifeEdge::basef, BLI_assert, BM_edge_exists(), KnifeLineHit::cagehit, KnifeUndoFrame::cuts, KnifeLineHit::f, KnifeVert::faces, KnifeEdge::faces, find_ref(), KnifeLineHit::hit, KnifeVert::is_cut, KnifeEdge::is_cut, KnifeVert::is_face, 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(), KnifeVert::ob, KnifeLineHit::ob, KnifeTool_OpData::undo, KnifeVert::v, KnifeLineHit::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 2060 of file editmesh_knife.c.
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, KnifeVert::v, and KnifeLineHit::v.
Referenced by knife_add_single_cut().
|
static |
Definition at line 1671 of file editmesh_knife.c.
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 1642 of file editmesh_knife.c.
References BLI_addtail(), BLI_mempool_calloc(), Ref::ref, 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 1664 of file editmesh_knife.c.
References find_ref(), and knife_append_list().
Referenced by add_hit_to_facehits().
Definition at line 1212 of file editmesh_knife.c.
References BM_elem_flag_test, and BM_ELEM_HIDDEN.
Referenced by knife_bvh_init().
Definition at line 1207 of file editmesh_knife.c.
References BM_elem_flag_test, and BM_ELEM_SELECT.
Referenced by knife_bvh_init().
|
static |
Definition at line 1176 of file editmesh_knife.c.
References KnifeObjectInfo::cagecos, copy_v3_v3(), KDL::cos(), knife_bm_tri_index_get(), and KnifeTool_OpData::objects_info.
Referenced by knife_bm_tri_cagecos_get_worldspace().
|
static |
Definition at line 1189 of file editmesh_knife.c.
References KDL::cos(), knife_bm_tri_cagecos_get(), mul_m4_v3(), KnifeTool_OpData::objects, and Object::obmat.
Referenced by knife_bvh_init(), knife_bvh_raycast(), knife_bvh_raycast_cb(), knife_bvh_raycast_filter(), and knife_ray_intersect_face().
|
static |
Definition at line 1161 of file editmesh_knife.c.
References BM_elem_index_get, KnifeObjectInfo::em, BMEditMesh::looptris, KnifeTool_OpData::objects_info, KnifeObjectInfo::tri_indices, and BMLoop::v.
Referenced by knife_bm_tri_cagecos_get().
|
static |
Definition at line 1301 of file editmesh_knife.c.
References BLI_bvhtree_free(), KnifeTool_OpData::bvh, NULL, and KnifeBVH::tree.
Referenced by knifetool_exit_ex().
|
static |
Definition at line 1217 of file editmesh_knife.c.
References usdtokens::b(), BKE_editmesh_from_object(), BLI_bvhtree_balance(), BLI_bvhtree_insert(), BLI_bvhtree_new(), bool, KnifeTool_OpData::bvh, KnifeTool_OpData::cut_through, blender::robust_pred::epsilon, BMLoop::f, knife_bm_face_is_not_hidden(), knife_bm_face_is_select(), knife_bm_tri_cagecos_get_worldspace(), BMEditMesh::looptris, NULL, KnifeTool_OpData::objects, KnifeTool_OpData::objects_len, KnifeTool_OpData::only_select, BMEditMesh::tottri, and KnifeBVH::tree.
Referenced by knifetool_init().
|
static |
Definition at line 1379 of file editmesh_knife.c.
References KnifeBVH::base_index, BLI_bvhtree_ray_cast(), KnifeTool_OpData::bvh, BVHTreeRayHit::co, copy_v3_v3(), BVHTreeRayHit::dist, BMLoop::f, BVHTreeRayHit::index, interp_v3_v3v3v3_uv(), knife_bm_tri_cagecos_get_worldspace(), knife_bvh_raycast_cb(), KnifeBVH::looptris, NULL, KnifeBVH::tree, UNPACK3, and KnifeBVH::uv.
Referenced by knife_calculate_snap_ref_edges(), knife_find_closest_face(), knife_snap_angle_relative(), knifetool_recast_cageco(), and point_is_visible().
|
static |
Definition at line 1309 of file editmesh_knife.c.
References usdtokens::b(), KnifeBVH::base_index, BKE_editmesh_from_object(), KnifeTool_OpData::bvh, BVHTreeRayHit::co, copy_v2_v2(), copy_v3_v3(), BVHTreeRay::direction, BVHTreeRayHit::dist, ED_view3d_clipping_test(), BMLoop::f, KnifeBVH::filter_cb, KnifeBVH::filter_data, BVHTreeRayHit::index, BVHTreeRay::isect_precalc, 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(), BVHTreeRayHit::no, BMFace::no, KnifeTool_OpData::objects, KnifeTool_OpData::objects_len, BVHTreeRay::origin, BVHTreeRay::radius, ViewContext::rv3d, RV3D_CLIPPING_ENABLED, BMEditMesh::tottri, UNPACK3, KnifeBVH::uv, ViewContext::v3d, and KnifeTool_OpData::vc.
Referenced by knife_bvh_raycast(), and knife_bvh_raycast_filter().
|
static |
Definition at line 1425 of file editmesh_knife.c.
References KnifeBVH::base_index, BLI_bvhtree_ray_cast(), KnifeTool_OpData::bvh, BVHTreeRayHit::co, copy_v3_v3(), BVHTreeRayHit::dist, BMLoop::f, KnifeBVH::filter_cb, KnifeBVH::filter_data, BVHTreeRayHit::index, interp_v3_v3v3v3_uv(), knife_bm_tri_cagecos_get_worldspace(), knife_bvh_raycast_cb(), KnifeBVH::looptris, NULL, KnifeBVH::tree, UNPACK3, and KnifeBVH::uv.
Referenced by point_is_visible().
|
static |
Definition at line 3761 of file editmesh_knife.c.
References BM_edge_in_face(), count, KnifeTool_OpData::curr, KnifeEdge::e, KnifePosData::edge, KnifeVert::edges, ListBase::first, KnifeEdge::is_invalid, knife_bvh_raycast(), knife_input_ray_segment(), KnifePosData::mval, Ref::next, normalize_v3_v3(), NULL, KnifeTool_OpData::prev, Ref::ref, sub_v3_v3v3(), and KnifePosData::vert.
Referenced by knife_snap_update_from_mval().
|
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 3819 of file editmesh_knife.c.
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, ViewContext::obedit, KnifeTool_OpData::prev, KnifeTool_OpData::region, ARegion::regiondata, SCE_ORIENT_DEFAULT, scene, KnifeTool_OpData::scene, Scene::toolsettings, ToolSettings::transform_pivot_point, ViewContext::v3d, KnifeTool_OpData::vc, and ViewContext::view_layer.
Referenced by knife_snap_update_from_mval().
|
static |
Definition at line 2166 of file editmesh_knife.c.
References BLI_listbase_count_at_most(), ListBase::first, knife_add_single_cut(), and r.
Referenced by knife_add_cut().
|
static |
Definition at line 1811 of file editmesh_knife.c.
References KnifeVert::base_index, KnifeEdge::faces, knife_append_list(), knife_get_face_kedges(), KnifeVert::ob, and KnifeEdge::v1.
Referenced by knife_add_single_cut(), and knife_split_edge().
|
static |
Definition at line 1633 of file editmesh_knife.c.
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 3391 of file editmesh_knife.c.
References KnifeTool_OpData::axis_constrained, KnifeVert::base_index, KnifeVert::cageco, KnifeVert::co, copy_v3_v3(), KnifeTool_OpData::curr, dist_squared_to_line_segment_v2(), ED_view3d_clipping_test(), KnifePosData::edge, KnifeTool_OpData::ethresh, ListBase::first, KnifeTool_OpData::ignore_edge_snapping, KnifeTool_OpData::ignore_vert_snapping, interp_v3_v3v3(), KnifeTool_OpData::is_angle_snapping, KnifeTool_OpData::is_interactive, KnifeEdge::is_invalid, KNIFE_FLT_EPS, knife_get_face_kedges(), knife_interp_v3_v3v3(), knife_project_v2(), knife_snap_edge_constrained(), knife_snap_size(), line_point_factor_v2(), line_point_factor_v3(), mid_v3_v3v3(), KnifeTool_OpData::mode, KnifePosData::mval, new_knife_vert(), Ref::next, NULL, KnifeVert::ob, KnifeTool_OpData::prev, Ref::ref, ViewContext::rv3d, RV3D_CLIPPING_ENABLED, KnifeTool_OpData::snap_midpoints, KnifeEdge::v1, KnifeEdge::v2, ViewContext::v3d, and KnifeTool_OpData::vc.
Referenced by knife_snap_update_from_mval().
|
static |
Definition at line 3207 of file editmesh_knife.c.
References add_v3_v3v3(), BM_elem_flag_test, BM_ELEM_SELECT, copy_v3_v3(), KnifeTool_OpData::curr, EDBM_face_find_nearest(), KnifeTool_OpData::is_interactive, KMAXDIST, knife_bvh_raycast(), knife_input_ray_segment(), ViewContext::mval, KnifePosData::mval, normalize_v3_v3(), NULL, KnifeTool_OpData::objects, KnifeTool_OpData::only_select, sub_v3_v3v3(), and KnifeTool_OpData::vc.
Referenced by knife_snap_update_from_mval().
|
static |
Definition at line 3491 of file editmesh_knife.c.
References KnifeTool_OpData::axis_constrained, KnifeVert::cageco, KnifeVert::co, copy_v2_v2(), copy_v3_v3(), KnifeTool_OpData::curr, dist_squared_to_line_segment_v2(), ED_view3d_clipping_test(), 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, KnifePosData::mval, NULL, 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_update_from_mval().
Definition at line 1690 of file editmesh_knife.c.
References ListBase::first, Ref::next, NULL, and Ref::ref.
Referenced by knife_split_edge().
|
static |
Definition at line 2840 of file editmesh_knife.c.
References usdtokens::b(), KnifeVert::base_index, KnifeLineHit::base_index, BKE_editmesh_from_object(), BLI_array_append, BLI_array_declare, BLI_array_len, BLI_bvhtree_intersect_plane(), BLI_smallhash_haskey(), BLI_smallhash_init(), BLI_smallhash_insert(), BLI_smallhash_iternew(), BLI_smallhash_iternew_p(), BLI_smallhash_iternext(), BLI_smallhash_iternext_p(), BLI_smallhash_lookup(), BLI_smallhash_reinsert(), BLI_smallhash_release(), BM_elem_flag_test, bm_elem_from_knife_edge(), bm_elem_from_knife_vert(), BM_ELEM_SELECT, KnifeTool_OpData::bvh, KnifePosData::cage, KnifeVert::cageco, KnifeLineHit::cagehit, calc_ortho_extent(), clip_to_ortho_planes(), closest_to_line_segment_v2(), BMVert::co, KnifeVert::co, copy_v2_v2(), copy_v3_v3(), cross_v3_v3v3(), KnifeTool_OpData::curr, ViewContext::depsgraph, dist_squared_to_line_segment_v2(), ED_view3d_win_to_segment_clipped(), KnifePosData::edge, ELEM, BMLoop::f, KnifeLineHit::f, fabsf, faces, ListBase::first, KnifeLineHit::hit, 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(), KnifeLineHit::kfe, 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_project_v2(), knife_ray_intersect_face(), KnifeLineHit::l, len_squared_v2v2(), len_v2v2(), KnifeTool_OpData::linehits, BMEditMesh::looptris, MEM_freeN, mid_v2_v2v2(), mid_v3_v3v3(), KnifePosData::mval, Ref::next, NULL, KnifeVert::ob, KnifeLineHit::ob, KnifeTool_OpData::objects, KnifeTool_OpData::objects_len, KnifeTool_OpData::only_select, KnifeTool_OpData::ortho_extent, KnifeTool_OpData::ortho_extent_center, KnifeLineHit::perc, RegionView3D::persp, plane_from_point_normal_v3(), point_is_visible(), KnifeTool_OpData::prev, Ref::ref, KnifeTool_OpData::region, result, ViewContext::rv3d, RV3D_CAMOB, KnifeLineHit::schit, set_linehit_depth(), set_lowest_face_tri(), KnifeTool_OpData::snap_midpoints, sub_v3_v3v3(), KnifeTool_OpData::totlinehit, BMEditMesh::tottri, transform_point_by_seg_v3(), KnifeBVH::tree, v, KnifeLineHit::v, KnifeEdge::v1, v1, v2, KnifeEdge::v2, ViewContext::v3d, KnifeTool_OpData::vc, and KnifePosData::vert.
Referenced by knife_update_active().
|
static |
Definition at line 2501 of file editmesh_knife.c.
References KnifeTool_OpData::linehits, MEM_freeN, NULL, and KnifeTool_OpData::totlinehit.
Referenced by EDBM_mesh_knife(), and knifetool_modal().
|
static |
Definition at line 1788 of file editmesh_knife.c.
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 4062 of file editmesh_knife.c.
References KnifeColors::axis_extra, KnifeColors::curpoint, KnifeColors::curpoint_a, KnifeColors::edge, KnifeColors::edge_extra, KnifeColors::line, KnifeColors::point, KnifeColors::point_a, 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, UI_GetThemeColorType3ubv(), KnifeColors::xaxis, KnifeColors::yaxis, and KnifeColors::zaxis.
Referenced by knifetool_init().
|
static |
Definition at line 1490 of file editmesh_knife.c.
References ED_view3d_unproject_v3(), ViewContext::region, and KnifeTool_OpData::vc.
Referenced by knife_calculate_snap_ref_edges(), knife_find_closest_face(), knife_find_line_hits(), knife_snap_angle_relative(), knife_start_cut(), knife_update_active(), and knifetool_recast_cageco().
|
static |
Definition at line 3368 of file editmesh_knife.c.
References interp_v3_v3v3(), KnifeTool_OpData::is_ortho, mul_project_m4_v3(), mul_v3_project_m4_v3(), RegionView3D::persinv, RegionView3D::persmat, ViewContext::rv3d, v1, v2, and KnifeTool_OpData::vc.
Referenced by knife_find_closest_edge_of_face().
Definition at line 1876 of file editmesh_knife.c.
References KnifeVert::is_invalid, KnifeEdge::is_invalid, KnifeVert::is_splitting, KnifeEdge::splits, KnifeEdge::v1, and KnifeEdge::v2.
Referenced by knifetool_undo().
|
static |
Definition at line 2314 of file editmesh_knife.c.
References KnifeEdge::basef, BKE_editmesh_from_object(), BLI_listbase_sort_r(), BLI_mempool_iternew(), BLI_mempool_iterstep(), BLI_smallhash_init(), BLI_smallhash_insert(), BLI_smallhash_iternew(), BLI_smallhash_iternext(), BLI_smallhash_lookup(), BLI_smallhash_release(), BMEditMesh::bm, 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(), ListBase::first, KnifeEdge::is_cut, KnifeVert::is_invalid, KnifeEdge::is_invalid, KnifeTool_OpData::kedges, knife_append_list(), knife_empty_list(), knife_make_face_cuts(), KnifeTool_OpData::kverts, line_point_factor_v3(), Ref::next, KnifeVert::ob, KnifeTool_OpData::only_select, Ref::ref, KnifeTool_OpData::select_result, sort_verts_by_dist_cb(), KnifeVert::v, and KnifeEdge::v1.
Referenced by knifetool_finish_single_pre().
|
static |
Definition at line 2179 of file editmesh_knife.c.
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, ListBase::first, KnifeEdge::is_invalid, MEM_freeN, Ref::next, NULL, Ref::ref, KnifeTool_OpData::select_result, KnifeVert::v, KnifeEdge::v1, and KnifeEdge::v2.
Referenced by knife_make_cuts().
|
static |
Definition at line 3191 of file editmesh_knife.c.
References KnifePosData::bmface, KnifePosData::cage, KnifePosData::co, KnifePosData::edge, KnifePosData::mval, NULL, KnifePosData::vert, zero_v2(), and zero_v3().
Referenced by knife_snap_update_from_mval(), and knifetool_init().
|
static |
Definition at line 1484 of file editmesh_knife.c.
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 2566 of file editmesh_knife.c.
References BKE_editmesh_from_object(), BLI_assert, KnifeVert::cageco, BMVert::co, dist_squared_to_line_segment_v2(), dist_squared_to_plane_v3(), ListBase::first, 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(), BMEditMesh::looptris, Ref::next, normal_tri_v3(), normalize_v3(), plane_from_point_normal_v3(), Ref::ref, sub_v3_v3v3(), BMEditMesh::tottri, UNPACK3, BMLoop::v, v, KnifeEdge::v1, v1, v2, and KnifeEdge::v2.
Referenced by knife_find_line_hits().
|
static |
Definition at line 1560 of file editmesh_knife.c.
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 3806 of file editmesh_knife.c.
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 3268 of file editmesh_knife.c.
References Freestyle::c, KnifeVert::cageco, ED_view3d_clipping_test(), ListBase::first, KnifeVert::is_invalid, KnifeEdge::is_invalid, knife_get_face_kedges(), knife_project_v2(), len_squared_v2v2(), Ref::next, Ref::ref, ViewContext::rv3d, RV3D_CLIPPING_ENABLED, KnifeEdge::v1, KnifeEdge::v2, ViewContext::v3d, and KnifeTool_OpData::vc.
Referenced by knife_snap_size().
|
static |
Definition at line 3622 of file editmesh_knife.c.
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, KnifeVert::faces, KnifeEdge::faces, ListBase::first, Object::imat, KnifeEdge::is_invalid, isect_ray_plane_v3(), 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(), madd_v3_v3v3fl(), mul_transposed_mat3_m4_v3(), KnifePosData::mval, KnifeTool_OpData::mval, Ref::next, BMFace::no, normalize_v3(), normalize_v3_v3(), NULL, KnifePosData::ob, plane_from_point_normal_v3(), KnifeTool_OpData::prev, Ref::ref, KnifeTool_OpData::snap_edge, KnifeTool_OpData::snap_ref_edge, snap_v3_angle_plane(), sub_v3_v3v3(), KnifeVert::v, KnifeEdge::v1, v1, v2, KnifeEdge::v2, and KnifePosData::vert.
Referenced by knife_snap_update_from_mval().
|
static |
Definition at line 3575 of file editmesh_knife.c.
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 3341 of file editmesh_knife.c.
References KnifeTool_OpData::curr, isect_line_line_v2_point(), KNIFE_FLT_EPSBIG, len_squared_v2v2(), line_point_factor_v2(), KnifePosData::mval, and KnifeTool_OpData::prev.
Referenced by knife_find_closest_edge_of_face().
|
static |
kcd->curr
must be up to date. Definition at line 3326 of file editmesh_knife.c.
References KnifePosData::base_index, BLI_assert, KnifePosData::bmface, KnifePosData::cage, KnifeTool_OpData::curr, usdtokens::density(), float(), KnifeTool_OpData::is_interactive, KnifePosData::is_space, knife_sample_screen_density_from_closest_face(), min_ff(), and KnifePosData::ob.
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 3880 of file editmesh_knife.c.
References KnifeTool_OpData::angle_snapping, KnifeTool_OpData::angle_snapping_mode, KnifeTool_OpData::axis_constrained, KnifePosData::base_index, KnifePosData::bmface, KnifePosData::cage, KnifePosData::co, copy_v2_v2(), KnifeTool_OpData::curr, KnifePosData::edge, KnifeTool_OpData::ignore_edge_snapping, KnifeTool_OpData::is_angle_snapping, KnifePosData::is_space, KNF_CONSTRAIN_ANGLE_MODE_RELATIVE, KNF_CONSTRAIN_ANGLE_MODE_SCREEN, knife_calculate_snap_ref_edges(), knife_constrain_axis(), knife_find_closest_edge_of_face(), knife_find_closest_face(), knife_find_closest_vert_of_edge(), knife_pos_data_clear(), knife_project_v2(), knife_snap_angle_relative(), knife_snap_angle_screen(), KnifeTool_OpData::mode, KnifePosData::mval, NULL, KnifePosData::ob, ViewContext::obedit, KnifeTool_OpData::prev, KnifeTool_OpData::snap_ref_edges_count, KnifeTool_OpData::vc, and KnifePosData::vert.
Referenced by knife_update_active().
|
static |
Definition at line 1817 of file editmesh_knife.c.
References KnifeVert::base_index, KnifeEdge::basef, BLI_addtail(), BLI_remlink(), BLI_stack_push(), KnifeEdge::e, KnifeVert::edges, KnifeVert::faces, KnifeEdge::faces, find_ref(), ListBase::first, KnifeVert::is_cut, KnifeEdge::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(), new_knife_edge(), new_knife_vert(), Ref::next, KnifeVert::ob, Ref::ref, 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 1896 of file editmesh_knife.c.
References KnifePosData::cage, KnifePosData::co, copy_v3_v3(), KnifeTool_OpData::curr, KnifePosData::edge, KnifePosData::is_space, KnifeMeasureData::is_stored, isect_line_plane_v3(), knife_input_ray_segment(), KnifeTool_OpData::mdata, KnifePosData::mval, negate_v3_v3(), NULL, RegionView3D::ofs, KnifeTool_OpData::prev, ViewContext::rv3d, KnifeTool_OpData::vc, KnifePosData::vert, RegionView3D::viewinv, and zero_v3().
Referenced by EDBM_mesh_knife(), and knifetool_modal().
|
static |
Update active knife edge/vert pointers.
Definition at line 4262 of file editmesh_knife.c.
References BLI_assert, KnifePosData::cage, copy_v3_v3(), KnifeTool_OpData::curr, isect_line_plane_v3(), knife_find_line_hits(), knife_input_ray_segment(), knife_snap_update_from_mval(), KnifeTool_OpData::mode, KnifePosData::mval, KnifeTool_OpData::mval, KnifeTool_OpData::prev, ViewContext::rv3d, KnifeTool_OpData::vc, and RegionView3D::viewinv.
Referenced by knifetool_modal(), and knifetool_update_mval().
|
static |
Definition at line 1090 of file editmesh_knife.c.
References KnifeTool_OpData::angle, KnifeTool_OpData::angle_snapping, KnifeTool_OpData::angle_snapping_increment, KnifeTool_OpData::angle_snapping_mode, KnifeTool_OpData::axis_constrained, KnifeTool_OpData::axis_string, BLI_snprintf(), C, KnifeTool_OpData::cut_through, KnifeTool_OpData::depth_test, ED_workspace_status_text(), KnifeTool_OpData::ignore_edge_snapping, 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, RAD2DEGF, KnifeTool_OpData::show_dist_angle, KnifeTool_OpData::snap_midpoints, TIP_, UI_MAX_DRAW_STR, WM_bool_as_string(), and WM_MODALKEY.
Referenced by knifetool_invoke(), and knifetool_modal().
Definition at line 1519 of file editmesh_knife.c.
References BM_face_point_inside_test(), BM_face_vert_share_loop(), BM_loop_is_adjacent(), BMVert::co, mid_v3_v3v3(), NULL, v1, and v2.
Referenced by knife_add_single_cut().
|
static |
Definition at line 4360 of file editmesh_knife.c.
References knifetool_exit().
Referenced by knifetool_invoke(), and MESH_OT_knife_tool().
|
static |
Definition at line 4414 of file editmesh_knife.c.
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 4422 of file editmesh_knife.c.
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 885 of file editmesh_knife.c.
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, KnifeLineHit::cagehit, 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(), GPUBatch, immBegin(), immBeginBatchAtMost(), immBindBuiltinProgram(), immEnd(), immUnbindProgram(), immUniformColor3ubv(), immVertex3fv(), immVertexFormat(), KnifeTool_OpData::is_angle_snapping, KnifeVert::is_cut, KnifeEdge::is_cut, KnifeVert::is_invalid, KnifeEdge::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, NULL, KnifeColors::point, KnifeColors::point_a, pos, KnifeTool_OpData::prev, rgba_uchar_to_float(), KnifeTool_OpData::show_dist_angle, KnifeTool_OpData::snap_ref_edge, KnifeTool_OpData::totkedge, KnifeTool_OpData::totkvert, KnifeTool_OpData::totlinehit, UI_DPI_FAC, KnifeLineHit::v, KnifeEdge::v1, KnifeEdge::v2, and KnifePosData::vert.
Referenced by knifetool_init().
|
static |
Definition at line 555 of file editmesh_knife.c.
References angle(), 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_snprintf(), copy_v3_v3(), cross_v3_v3v3(), KnifeTool_OpData::curr, 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_2D_UNIFORM_COLOR, 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(), KnifePosData::ob, Object::obmat, RAD2DEGF, KnifeTool_OpData::region, ARegion::regiondata, KnifeTool_OpData::scene, sub_v3_v3v3(), UnitSettings::system, TH_TEXT, TH_WIRE, UI_GetThemeColor3ubv(), Scene::unit, USER_UNIT_NONE, and wmOrtho2_region_pixelspace().
Referenced by knifetool_draw_visible_angles().
|
static |
Definition at line 422 of file editmesh_knife.c.
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, v1, and v2.
Referenced by knifetool_draw().
|
static |
Definition at line 865 of file editmesh_knife.c.
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 442 of file editmesh_knife.c.
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, v1, v2, KnifeColors::xaxis, KnifeColors::yaxis, and KnifeColors::zaxis.
Referenced by knifetool_draw().
|
static |
Definition at line 686 of file editmesh_knife.c.
References angle(), KnifeTool_OpData::angle_snapping_mode, angle_v3v3v3(), KnifePosData::cage, KnifeMeasureData::cage, KnifeVert::cageco, compare_v3v3(), KnifeTool_OpData::curr, ED_view3d_project_float_global(), KnifePosData::edge, KnifeVert::edges, ListBase::first, 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(), KnifeTool_OpData::mdata, KnifePosData::mval, KnifeMeasureData::mval, Ref::next, KnifeTool_OpData::prev, Ref::ref, 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 485 of file editmesh_knife.c.
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(), BLI_snprintf(), 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_2D_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, UnitSettings::scale_length, KnifeTool_OpData::scene, UnitSettings::system, TH_TEXT, UI_GetThemeColor3ubv(), Scene::unit, USER_UNIT_NONE, and wmOrtho2_region_pixelspace().
Referenced by knifetool_draw_dist_angle().
|
static |
Definition at line 4248 of file editmesh_knife.c.
References wmOperator::customdata, knifetool_exit_ex(), and NULL.
Referenced by knifetool_cancel(), and knifetool_modal().
|
static |
Definition at line 4192 of file editmesh_knife.c.
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_free_obinfo(), KnifeTool_OpData::kverts, KnifeTool_OpData::linehits, MEM_freeN, NULL, KnifeTool_OpData::objects, KnifeTool_OpData::objects_free, KnifeTool_OpData::objects_info, KnifeTool_OpData::objects_len, 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 4348 of file editmesh_knife.c.
References wmOperator::customdata, and knifetool_finish_ex().
Referenced by knifetool_modal().
|
static |
Definition at line 4333 of file editmesh_knife.c.
References usdtokens::b(), knifetool_finish_single_post(), knifetool_finish_single_pre(), KnifeTool_OpData::objects, and KnifeTool_OpData::objects_len.
Referenced by knifetool_finish().
|
static |
A post version is needed to to delay recalculating tessellation after making cuts. Without this, knife-project can't use the BVH tree to select geometry after a cut, see: T98349.
Definition at line 4320 of file editmesh_knife.c.
References BKE_editmesh_from_object(), Object::data, EDBM_selectmode_flush(), and EDBM_update().
Referenced by EDBM_mesh_knife(), and knifetool_finish_ex().
|
static |
Definition at line 4311 of file editmesh_knife.c.
References knife_make_cuts().
Referenced by EDBM_mesh_knife(), and knifetool_finish_ex().
|
static |
Definition at line 4050 of file editmesh_knife.c.
References KnifeObjectInfo::cagecos, MEM_SAFE_FREE, KnifeTool_OpData::objects_info, and KnifeObjectInfo::tri_indices.
Referenced by knifetool_exit_ex().
|
static |
Definition at line 4084 of file editmesh_knife.c.
References KnifeTool_OpData::angle_snapping, KnifeTool_OpData::angle_snapping_increment, KnifeTool_OpData::angle_snapping_mode, KnifeTool_OpData::arena, KnifeTool_OpData::axis_string, usdtokens::b(), B_UNIT_NONE, BKE_editmesh_from_object(), BKE_view_layer_array_from_objects_in_edit_mode_unique_data, 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_callocN, MEM_SIZE_OPTIMAL, KnifeTool_OpData::no_cuts, KnifeTool_OpData::num, NUM_NO_NEGATIVE, KnifeTool_OpData::objects, KnifeTool_OpData::objects_free, KnifeTool_OpData::objects_info, KnifeTool_OpData::objects_len, KnifeTool_OpData::only_select, KnifeTool_OpData::origedgemap, KnifeTool_OpData::origvertmap, KnifeTool_OpData::prev, KnifeTool_OpData::refs, ViewContext::region, KnifeTool_OpData::region, REGION_DRAW_POST_VIEW, SCE_SELECT_FACE, scene, ViewContext::scene, KnifeTool_OpData::scene, KnifeTool_OpData::select_result, BMEditMesh::selectmode, KnifeTool_OpData::show_dist_angle, KnifeTool_OpData::splitstack, UnitSettings::system, ARegion::type, KnifeTool_OpData::undostack, Scene::unit, NumInput::unit_sys, NumInput::unit_type, ViewContext::v3d, NumInput::val_flag, KnifeTool_OpData::vc, ViewContext::view_layer, and KnifeTool_OpData::vthresh.
Referenced by EDBM_mesh_knife(), and knifetool_invoke().
|
static |
Definition at line 4020 of file editmesh_knife.c.
References BKE_editmesh_from_object(), BKE_editmesh_vert_coords_alloc(), BMEditMesh::bm, BM_elem_index_get, BM_mesh_elem_index_ensure(), BM_VERT, KnifeObjectInfo::cagecos, DEG_get_evaluated_id(), ViewContext::depsgraph, KnifeObjectInfo::em, float(), Object::id, Scene::id, BMEditMesh::looptris, MEM_mallocN, NULL, KnifeTool_OpData::objects_info, KnifeTool_OpData::scene, BMEditMesh::tottri, KnifeObjectInfo::tri_indices, v, and KnifeTool_OpData::vc.
Referenced by knifetool_init().
|
static |
Definition at line 4791 of file editmesh_knife.c.
References usdtokens::b(), BKE_editmesh_from_object(), BKE_report(), BLI_assert, BMEditMesh::bm, C, 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(), knifetool_update_mval_i(), MEM_callocN, wmEvent::mval, NULL, KnifeTool_OpData::objects, KnifeTool_OpData::objects_len, 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, BMesh::totfacesel, UNUSED_VARS_NDEBUG, WM_CURSOR_KNIFE, WM_cursor_modal_set(), and WM_event_add_modal_handler().
Referenced by MESH_OT_knife_tool().
|
static |
Definition at line 4429 of file editmesh_knife.c.
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(), C, 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::mode, MOUSEMOVE, MOUSEPAN, MOUSEROTATE, MOUSEZOOM, KnifePosData::mval, wmEvent::mval, NDOF_MOTION, KnifeTool_OpData::no_cuts, NULL, KnifeTool_OpData::num, KnifePosData::ob, OB_MESH, 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, ViewContext::region, KnifeTool_OpData::region, RNA_float_get(), ViewContext::rv3d, KnifeTool_OpData::show_dist_angle, KnifeTool_OpData::snap_edge, KnifeTool_OpData::snap_midpoints, KnifeTool_OpData::snap_ref_edges_count, NumInput::str_cur, KnifeTool_OpData::totkvert, KnifeTool_OpData::totlinehit, 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 4366 of file editmesh_knife.c.
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, NULL, WM_modalkeymap_assign(), WM_modalkeymap_ensure(), and WM_modalkeymap_find().
Referenced by ED_keymap_mesh().
|
static |
Definition at line 374 of file editmesh_knife.c.
References KnifePosData::cage, copy_v3_v3(), KnifeTool_OpData::curr, ED_view3d_win_to_3d(), isect_ray_plane_v3(), madd_v3_v3v3fl(), KnifePosData::mval, NULL, 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 1502 of file editmesh_knife.c.
References knife_bvh_raycast(), knife_input_ray_segment(), normalize_v3_v3(), NULL, 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 3940 of file editmesh_knife.c.
References BLI_mempool_iternew(), BLI_mempool_iterstep(), BLI_stack_discard(), BLI_stack_peek(), BLI_stack_pop(), KnifeUndoFrame::cuts, KnifeEdge::is_cut, KnifeEdge::is_invalid, KnifeTool_OpData::kedges, knife_join_edge(), KnifeUndoFrame::mdata, KnifeTool_OpData::mdata, KnifeTool_OpData::mode, Ref::next, NULL, KnifeUndoFrame::pos, KnifeTool_OpData::prev, Ref::ref, KnifeEdge::splits, KnifeUndoFrame::splits, KnifeTool_OpData::splitstack, KnifeTool_OpData::undostack, KnifeEdge::v1, v1, v2, and KnifeEdge::v2.
Referenced by knifetool_modal().
|
static |
Definition at line 4289 of file editmesh_knife.c.
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 4299 of file editmesh_knife.c.
References knifetool_update_mval(), and UNPACK2.
Referenced by knifetool_invoke(), and knifetool_modal().
Definition at line 1935 of file editmesh_knife.c.
References KnifeLineHit::l, KnifeLineHit::m, and KnifeLineHit::v.
Referenced by prepare_linehits_for_cut().
|
static |
Definition at line 1921 of file editmesh_knife.c.
References KnifePosData::bmface, KnifePosData::cage, KnifeLineHit::cagehit, KnifePosData::co, copy_v2_v2(), copy_v3_v3(), KnifePosData::edge, KnifeLineHit::f, KnifeLineHit::hit, 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 4867 of file editmesh_knife.c.
References 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, NULL, 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(), and wmOperatorType::srna.
Referenced by ED_operatortypes_mesh().
|
static |
Definition at line 1722 of file editmesh_knife.c.
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 1710 of file editmesh_knife.c.
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(), knife_find_closest_edge_of_face(), 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 2743 of file editmesh_knife.c.
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(), NULL, RegionView3D::persp, ViewContext::region, ViewContext::rv3d, RV3D_CAMOB, RV3D_CLIPPING_ENABLED, sub_v3_v3(), ViewContext::v3d, KnifeTool_OpData::vc, and view.
Referenced by EDBM_mesh_knife(), and knife_find_line_hits().
|
static |
Definition at line 1966 of file editmesh_knife.c.
References fabsf, KnifeLineHit::kfe, KNIFE_FLT_EPSBIG, KnifeLineHit::l, linehit_compare(), KnifeTool_OpData::linehits, KnifeLineHit::m, NULL, KnifeTool_OpData::totlinehit, and KnifeLineHit::v.
Referenced by knife_add_cut().
|
static |
Definition at line 2833 of file editmesh_knife.c.
References KnifeLineHit::cagehit, dot_m4_v3_row_z(), KnifeLineHit::m, RegionView3D::persmatob, ViewContext::rv3d, and KnifeTool_OpData::vc.
Referenced by knife_find_line_hits().
|
static |
Definition at line 2524 of file editmesh_knife.c.
References BLI_assert, BLI_ghash_insert(), BLI_ghash_lookup(), BMLoop::f, 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 3557 of file editmesh_knife.c.
References angle(), angle_signed_v2v2(), angle_to_mat2(), BLI_ASSERT_UNIT_V2, mul_v2_m2v2(), normalize_v2_v2(), r, 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 3607 of file editmesh_knife.c.
References angle(), angle_signed_on_axis_v3v3_v3(), r, rotate_v3_v3v3fl(), and v.
Referenced by knife_snap_angle_relative().
Definition at line 2296 of file editmesh_knife.c.
References KnifeVert::co, and len_squared_v3v3().
Referenced by knife_make_cuts().