61 float *clip_xmin =
nullptr, *clip_xmax =
nullptr;
62 float *clip_ymin =
nullptr, *clip_ymax =
nullptr;
63 float *clip_zmin =
nullptr, *clip_zmax =
nullptr;
74 clip_zmin = planes[planes_len++];
77 clip_xmin = planes[planes_len++];
78 clip_xmax = planes[planes_len++];
79 clip_ymin = planes[planes_len++];
80 clip_ymax = planes[planes_len++];
83 clip_zmax = planes[planes_len++];
87 if (planes_len != 0) {
91 projection.
ptr(), clip_xmin, clip_xmax, clip_ymin, clip_ymax, clip_zmin, clip_zmax);
109 const rctf *win_rect,
110 const float content_planes[][4],
111 const int content_planes_len,
113 float r_screen_co_a[2],
114 float r_screen_co_b[2])
120 region, v_a, r_screen_co_a, clip_flag_nowin);
122 region, v_b, r_screen_co_b, clip_flag_nowin);
132 if (content_planes_len == 0) {
147 float v_a_clip[3], v_b_clip[3];
176 float r_screen_co_a[2],
177 float r_screen_co_b[2])
226 const float screen_co_a[2],
227 const float screen_co_b[2],
270 if (!
data->hide_vert.is_empty() &&
data->hide_vert[index]) {
282 data->func(
data->user_data, screen_co, index);
286 void (*func)(
void *user_data,
287 const float screen_co[2],
304 data.user_data = user_data;
305 data.clip_flag = clip_flag;
334 data->func(
data->user_data, eve, screen_co, index);
339 void (*func)(
void *user_data,
BMVert *eve,
const float screen_co[2],
int index),
353 data.user_data = user_data;
354 data.clip_flag = clip_flag;
358 vc->
obedit->object_to_world().ptr());
382 float screen_co_a[2], screen_co_b[2];
388 data->content_planes,
389 data->content_planes_len,
396 data->func(
data->user_data, eed, screen_co_a, screen_co_b, index);
400 void (*func)(
void *user_data,
402 const float screen_co_a[2],
403 const float screen_co_b[2],
418 data.win_rect.xmin = 0;
419 data.win_rect.ymin = 0;
424 data.user_data = user_data;
425 data.clip_flag = clip_flag;
429 vc->
obedit->object_to_world().ptr());
437 data.content_planes_len = 0;
467 float v_a_clip[3], v_b_clip[3];
472 float screen_co_a[2], screen_co_b[2];
478 data->content_planes,
479 data->content_planes_len,
486 data->func(
data->user_data, eed, screen_co_a, screen_co_b, index);
490 void (*func)(
void *user_data,
492 const float screen_co_a[2],
493 const float screen_co_b[2],
508 data.win_rect.xmin = 0;
509 data.win_rect.ymin = 0;
514 data.user_data = user_data;
515 data.clip_flag = clip_flag;
522 data.content_planes_len = 0;
529 vc->
rv3d, vc->
obedit->object_to_world().ptr());
563 data->func(
data->user_data, efa, screen_co, index);
568 void (*func)(
void *user_data,
BMFace *efa,
const float screen_co_b[2],
int index),
582 data.user_data = user_data;
583 data.clip_flag = clip_flag;
587 const int face_dot_tags_num = mesh->
runtime->subsurf_face_dot_tags.size();
588 if (face_dot_tags_num && (face_dot_tags_num != mesh->
verts_num)) {
605 void (*func)(
void *user_data,
611 const float screen_co_b[2]),
625 vc->
obedit->object_to_world().ptr());
633 if (bezt->
hide == 0) {
645 func(user_data, nu,
nullptr, bezt, 1,
false, screen_co);
655 func(user_data, nu,
nullptr, bezt, 0,
true, screen_co);
663 func(user_data, nu,
nullptr, bezt, 1,
true, screen_co);
671 func(user_data, nu,
nullptr, bezt, 2,
true, screen_co);
689 func(user_data, nu, bp,
nullptr, -1,
false, screen_co);
704 void (*func)(
void *user_data,
706 const float screen_co_b[2]),
719 func(user_data, ml, screen_co);
731 void (*func)(
void *user_data,
BPoint *bp,
const float screen_co[2]),
741 const float *co = dl ? dl->
verts :
nullptr;
748 obedit->object_to_world().ptr());
751 for (
i = 0;
i <
N;
i++, bp++, co += 3) {
757 func(user_data, bp, screen_co);
770 void (*func)(
void *user_data,
772 const float screen_co_a[2],
773 const float screen_co_b[2]),
781 float content_planes[6][4];
782 int content_planes_len;
794 content_planes_len = 0;
802 float screen_co_a[2], screen_co_b[2];
803 const float *v_a = ebone->
head, *v_b = ebone->
tail;
821 vc->
region, v_a, v_b, clip_flag, screen_co_a, screen_co_b))
827 func(user_data, ebone, screen_co_a, screen_co_b);
838 void (*func)(
void *user_data,
840 const float screen_co_a[2],
841 const float screen_co_b[2]),
853 float content_planes[6][4];
854 int content_planes_len;
859 vc->
region, ob_eval, clip_flag, content_planes);
866 content_planes_len = 0;
875 float screen_co_a[2], screen_co_b[2];
894 vc->
region, v_a, v_b, clip_flag, screen_co_a, screen_co_b))
900 func(user_data, pchan, screen_co_a, screen_co_b);
Functions to deal with Armatures.
Blender kernel action and pose functionality.
bPoseChannel * BKE_pose_channel_find_name(const bPose *pose, const char *name)
ListBase * BKE_curve_editNurbs_get(Curve *cu)
const CustomData_MeshMasks CD_MASK_BAREMESH
display list (or rather multi purpose list) stuff.
DispList * BKE_displist_find(struct ListBase *lb, int type)
void BKE_mesh_foreach_mapped_edge(Mesh *mesh, int tot_edges, void(*func)(void *user_data, int index, const float v0co[3], const float v1co[3]), void *user_data)
void BKE_mesh_foreach_mapped_face_center(Mesh *mesh, void(*func)(void *user_data, int index, const float cent[3], const float no[3]), void *user_data, MeshForeachFlag flag)
void BKE_mesh_foreach_mapped_subdiv_face_center(Mesh *mesh, void(*func)(void *user_data, int index, const float cent[3], const float no[3]), void *user_data, MeshForeachFlag flag)
void BKE_mesh_foreach_mapped_vert(const Mesh *mesh, void(*func)(void *user_data, int index, const float co[3], const float no[3]), void *user_data, MeshForeachFlag flag)
Mesh * BKE_mesh_wrapper_ensure_subdivision(Mesh *mesh)
General operations, lookup, etc. for blender objects.
Mesh * BKE_object_get_evaluated_mesh(const Object *object_eval)
#define LISTBASE_FOREACH(type, var, list)
bool clip_segment_v3_plane_n(const float p1[3], const float p2[3], const float plane_array[][4], int plane_num, float r_p1[3], float r_p2[3])
void planes_from_projmat(const float mat[4][4], float left[4], float right[4], float bottom[4], float top[4], float near[4], float far[4])
bool BLI_rctf_isect_segment(const struct rctf *rect, const float s1[2], const float s2[2])
T * DEG_get_evaluated(const Depsgraph *depsgraph, T *id)
#define BEZT_ISSEL_ANY(bezt)
Object is a sort of wrapper for general info.
void ED_view3d_check_mats_rv3d(RegionView3D *rv3d)
@ V3D_PROJ_TEST_CLIP_NEAR
@ V3D_PROJ_TEST_CLIP_CONTENT
eV3DProjStatus ED_view3d_project_float_object(const ARegion *region, const float co[3], float r_co[2], eV3DProjTest flag)
void ED_view3d_clipping_local(RegionView3D *rv3d, const float mat[4][4])
blender::float4x4 ED_view3d_ob_project_mat_get(const RegionView3D *rv3d, const Object *ob)
#define BM_elem_flag_test(ele, hflag)
BMesh const char void * data
void BM_mesh_elem_table_ensure(BMesh *bm, const char htype)
BLI_INLINE BMEdge * BM_edge_at_index(BMesh *bm, const int index)
BLI_INLINE BMVert * BM_vert_at_index(BMesh *bm, const int index)
BLI_INLINE BMFace * BM_face_at_index(BMesh *bm, const int index)
GAttributeReader lookup(const StringRef attribute_id) const
static bool handles_visible(KeyframeEditData *ked, BezTriple *bezt)
bool bone_is_visible(const bArmature *armature, const Bone *bone)
Mesh * editbmesh_get_eval_cage_from_orig(Depsgraph *depsgraph, const Scene *scene, Object *obedit, const CustomData_MeshMasks *dataMask)
MatBase< float, 4, 4 > float4x4
struct EditLatt * editlatt
MeshRuntimeHandle * runtime
ObjectRuntimeHandle * runtime
const c_style_mat & ptr() const
float content_planes[6][4]
void(* func)(void *user_data, BMEdge *eed, const float screen_co_a[2], const float screen_co_b[2], int index)
void(* func)(void *user_data, BMFace *efa, const float screen_co_b[2], int index)
blender::VArraySpan< bool > hide_vert
void(* func)(void *user_data, const float screen_co[2], int index)
void(* func)(void *user_data, BMVert *eve, const float screen_co[2], int index)
void pose_foreachScreenBone(const ViewContext *vc, void(*func)(void *user_data, bPoseChannel *pchan, const float screen_co_a[2], const float screen_co_b[2]), void *user_data, const eV3DProjTest clip_flag)
void mesh_foreachScreenVert(const ViewContext *vc, void(*func)(void *user_data, BMVert *eve, const float screen_co[2], int index), void *user_data, eV3DProjTest clip_flag)
static void mesh_foreachScreenVert__mapFunc(void *user_data, int index, const float co[3], const float[3])
static bool view3d_project_segment_to_screen_with_clip_tag(const ARegion *region, const float v_a[3], const float v_b[3], const eV3DProjTest clip_flag, float r_screen_co_a[2], float r_screen_co_b[2])
static void mesh_foreachScreenEdge__mapFunc(void *user_data, int index, const float v_a[3], const float v_b[3])
void mesh_foreachScreenFace(const ViewContext *vc, void(*func)(void *user_data, BMFace *efa, const float screen_co_b[2], int index), void *user_data, const eV3DProjTest clip_flag)
void mesh_foreachScreenEdge(const ViewContext *vc, void(*func)(void *user_data, BMEdge *eed, const float screen_co_a[2], const float screen_co_b[2], int index), void *user_data, eV3DProjTest clip_flag)
void armature_foreachScreenBone(const ViewContext *vc, void(*func)(void *user_data, EditBone *ebone, const float screen_co_a[2], const float screen_co_b[2]), void *user_data, const eV3DProjTest clip_flag)
static void mesh_foreachScreenFace__mapFunc(void *user_data, int index, const float cent[3], const float[3])
static void meshobject_foreachScreenVert__mapFunc(void *user_data, int index, const float co[3], const float[3])
void mball_foreachScreenElem(const ViewContext *vc, void(*func)(void *user_data, MetaElem *ml, const float screen_co_b[2]), void *user_data, const eV3DProjTest clip_flag)
void nurbs_foreachScreenVert(const ViewContext *vc, void(*func)(void *user_data, Nurb *nu, BPoint *bp, BezTriple *bezt, int beztindex, bool handles_visible, const float screen_co_b[2]), void *user_data, const eV3DProjTest clip_flag)
static void mesh_foreachScreenEdge_clip_bb_segment__mapFunc(void *user_data, int index, const float v_a[3], const float v_b[3])
static int content_planes_from_clip_flag(const ARegion *region, const Object *ob, const eV3DProjTest clip_flag, float planes[6][4])
void mesh_foreachScreenEdge_clip_bb_segment(const ViewContext *vc, void(*func)(void *user_data, BMEdge *eed, const float screen_co_a[2], const float screen_co_b[2], int index), void *user_data, eV3DProjTest clip_flag)
void lattice_foreachScreenVert(const ViewContext *vc, void(*func)(void *user_data, BPoint *bp, const float screen_co[2]), void *user_data, const eV3DProjTest clip_flag)
void meshobject_foreachScreenVert(const ViewContext *vc, void(*func)(void *user_data, const float screen_co[2], int index), void *user_data, eV3DProjTest clip_flag)
static bool view3d_project_segment_to_screen_with_content_clip_planes(const ARegion *region, const float v_a[3], const float v_b[3], const eV3DProjTest clip_flag, const rctf *win_rect, const float content_planes[][4], const int content_planes_len, float r_screen_co_a[2], float r_screen_co_b[2])