refactor foreachScreen functions for clipping, now the projection clipping flag is passed down directly rather then converting the enum into a flag, also fix own recent crash lasso seleting in object mode with pose objects.
This commit is contained in:
@@ -3276,7 +3276,7 @@ static short findnearestNurbvert(ViewContext *vc, short sel, const int mval[2],
|
||||
data.mval_fl[1] = mval[1];
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
|
||||
nurbs_foreachScreenVert(vc, findnearestNurbvert__doClosest, &data);
|
||||
nurbs_foreachScreenVert(vc, findnearestNurbvert__doClosest, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
|
||||
*nurb = data.nurb;
|
||||
*bezt = data.bezt;
|
||||
|
||||
@@ -200,51 +200,46 @@ void ED_object_select_linked_by_id(struct bContext *C, struct ID *id);
|
||||
|
||||
/* object_iterators.c */
|
||||
|
||||
/* enum for passing to foreach functions to test RV3D_CLIPPING */
|
||||
typedef enum eV3DClipTest {
|
||||
V3D_CLIP_TEST_OFF = 0, /* clipping is off */
|
||||
V3D_CLIP_TEST_RV3D_CLIPPING = 1, /* clip single points */
|
||||
V3D_CLIP_TEST_REGION = 2 /* use for edges to check if both verts are in the view, but not RV3D_CLIPPING */
|
||||
} eV3DClipTest;
|
||||
#include "ED_view3d.h" /* XXX, needed for eV3DProjTest */
|
||||
|
||||
/* foreach iterators */
|
||||
void mesh_foreachScreenVert(
|
||||
struct ViewContext *vc,
|
||||
void (*func)(void *userData, struct BMVert *eve, const float screen_co[2], int index),
|
||||
void *userData, eV3DClipTest clipVerts);
|
||||
void *userData, const eV3DProjTest clip_flag);
|
||||
void mesh_foreachScreenEdge(
|
||||
struct ViewContext *vc,
|
||||
void (*func)(void *userData, struct BMEdge *eed, const float screen_co_a[2], const float screen_co_b[2],
|
||||
int index),
|
||||
void *userData, eV3DClipTest clipVerts);
|
||||
void *userData, const eV3DProjTest clip_flag);
|
||||
void mesh_foreachScreenFace(
|
||||
struct ViewContext *vc,
|
||||
void (*func)(void *userData, struct BMFace *efa, const float screen_co[2], int index),
|
||||
void *userData);
|
||||
void *userData, const eV3DProjTest clip_flag);
|
||||
void nurbs_foreachScreenVert(
|
||||
struct ViewContext *vc,
|
||||
void (*func)(void *userData, struct Nurb *nu, struct BPoint *bp, struct BezTriple *bezt,
|
||||
int beztindex, const float screen_co[2]),
|
||||
void *userData);
|
||||
void *userData, const eV3DProjTest clip_flag);
|
||||
void mball_foreachScreenElem(
|
||||
struct ViewContext *vc,
|
||||
void (*func)(void *userData, struct MetaElem *ml, const float screen_co[2]),
|
||||
void *userData);
|
||||
void *userData, const eV3DProjTest clip_flag);
|
||||
void lattice_foreachScreenVert(
|
||||
struct ViewContext *vc,
|
||||
void (*func)(void *userData, struct BPoint *bp,
|
||||
const float screen_co[2]),
|
||||
void *userData);
|
||||
void *userData, const eV3DProjTest clip_flag);
|
||||
void armature_foreachScreenBone(
|
||||
struct ViewContext *vc,
|
||||
void (*func)(void *userData, struct EditBone *ebone,
|
||||
const float screen_co_a[2], const float screen_co_b[2]),
|
||||
void *userData);
|
||||
void *userData, const eV3DProjTest clip_flag);
|
||||
void pose_foreachScreenBone(
|
||||
struct ViewContext *vc,
|
||||
void (*func)(void *userData, struct bPoseChannel *pchan,
|
||||
const float screen_co_a[2], const float screen_co_b[2]),
|
||||
void *userData);
|
||||
void *userData, const eV3DProjTest clip_flag);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -50,6 +50,8 @@ struct Nurb;
|
||||
struct Object;
|
||||
struct RegionView3D;
|
||||
struct Scene;
|
||||
struct bScreen;
|
||||
struct ScrArea;
|
||||
struct View3D;
|
||||
struct ViewContext;
|
||||
struct bContext;
|
||||
@@ -126,24 +128,27 @@ typedef enum {
|
||||
V3D_PROJ_TEST_CLIP_WIN = (1 << 1),
|
||||
} eV3DProjTest;
|
||||
|
||||
#define V3D_PROJ_TEST_CLIP_DEFAULT (V3D_PROJ_TEST_CLIP_BB | V3D_PROJ_TEST_CLIP_WIN)
|
||||
#define V3D_PROJ_TEST_ALL (V3D_PROJ_TEST_CLIP_BB | V3D_PROJ_TEST_CLIP_WIN)
|
||||
|
||||
|
||||
/* *** short *** */
|
||||
eV3DProjStatus ED_view3d_project_short_ex(struct ARegion *ar, float perspmat[4][4], const int is_local,
|
||||
const float co[3], short r_co[2], eV3DProjTest flag);
|
||||
eV3DProjStatus ED_view3d_project_short_global(struct ARegion *ar, const float co[3], short r_co[2], eV3DProjTest flag);
|
||||
eV3DProjStatus ED_view3d_project_short_object(struct ARegion *ar, const float co[3], short r_co[2], eV3DProjTest flag);
|
||||
const float co[3], short r_co[2], const eV3DProjTest flag);
|
||||
eV3DProjStatus ED_view3d_project_short_global(struct ARegion *ar, const float co[3], short r_co[2], const eV3DProjTest flag);
|
||||
eV3DProjStatus ED_view3d_project_short_object(struct ARegion *ar, const float co[3], short r_co[2], const eV3DProjTest flag);
|
||||
|
||||
/* *** int *** */
|
||||
eV3DProjStatus ED_view3d_project_int_ex(struct ARegion *ar, float perspmat[4][4], const int is_local,
|
||||
const float co[3], int r_co[2], eV3DProjTest flag);
|
||||
eV3DProjStatus ED_view3d_project_int_global(struct ARegion *ar, const float co[3], int r_co[2], eV3DProjTest flag);
|
||||
eV3DProjStatus ED_view3d_project_int_object(struct ARegion *ar, const float co[3], int r_co[2], eV3DProjTest flag);
|
||||
const float co[3], int r_co[2], const eV3DProjTest flag);
|
||||
eV3DProjStatus ED_view3d_project_int_global(struct ARegion *ar, const float co[3], int r_co[2], const eV3DProjTest flag);
|
||||
eV3DProjStatus ED_view3d_project_int_object(struct ARegion *ar, const float co[3], int r_co[2], const eV3DProjTest flag);
|
||||
|
||||
/* *** float *** */
|
||||
eV3DProjStatus ED_view3d_project_float_ex(struct ARegion *ar, float perspmat[4][4], const int is_local,
|
||||
const float co[3], float r_co[2], eV3DProjTest flag);
|
||||
eV3DProjStatus ED_view3d_project_float_global(struct ARegion *ar, const float co[3], float r_co[2], eV3DProjTest flag);
|
||||
eV3DProjStatus ED_view3d_project_float_object(struct ARegion *ar, const float co[3], float r_co[2], eV3DProjTest flag);
|
||||
const float co[3], float r_co[2], const eV3DProjTest flag);
|
||||
eV3DProjStatus ED_view3d_project_float_global(struct ARegion *ar, const float co[3], float r_co[2], const eV3DProjTest flag);
|
||||
eV3DProjStatus ED_view3d_project_float_object(struct ARegion *ar, const float co[3], float r_co[2], const eV3DProjTest flag);
|
||||
|
||||
void ED_view3d_project_float_v2_m4(const struct ARegion *a, const float co[3], float r_co[2], float mat[4][4]);
|
||||
void ED_view3d_project_float_v3_m4(struct ARegion *a, const float co[3], float r_co[3], float mat[4][4]);
|
||||
|
||||
@@ -433,11 +433,11 @@ BMVert *EDBM_vert_find_nearest(ViewContext *vc, float *r_dist, const short sel,
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
|
||||
|
||||
mesh_foreachScreenVert(vc, findnearestvert__doClosest, &data, V3D_CLIP_TEST_RV3D_CLIPPING);
|
||||
mesh_foreachScreenVert(vc, findnearestvert__doClosest, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
|
||||
if (data.dist > 3) {
|
||||
data.pass = 1;
|
||||
mesh_foreachScreenVert(vc, findnearestvert__doClosest, &data, V3D_CLIP_TEST_RV3D_CLIPPING);
|
||||
mesh_foreachScreenVert(vc, findnearestvert__doClosest, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
}
|
||||
|
||||
*r_dist = data.dist;
|
||||
@@ -525,7 +525,7 @@ BMEdge *EDBM_edge_find_nearest(ViewContext *vc, float *r_dist)
|
||||
data.closest = NULL;
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
|
||||
|
||||
mesh_foreachScreenEdge(vc, findnearestedge__doClosest, &data, V3D_CLIP_TEST_REGION);
|
||||
mesh_foreachScreenEdge(vc, findnearestedge__doClosest, &data, V3D_PROJ_TEST_CLIP_WIN);
|
||||
|
||||
*r_dist = data.dist;
|
||||
return data.closest;
|
||||
@@ -588,7 +588,7 @@ BMFace *EDBM_face_find_nearest(ViewContext *vc, float *r_dist)
|
||||
data.dist = 0x7FFF; /* largest short */
|
||||
data.toFace = efa;
|
||||
|
||||
mesh_foreachScreenFace(vc, findnearestface__getDistance, &data);
|
||||
mesh_foreachScreenFace(vc, findnearestface__getDistance, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
|
||||
if ((vc->em->selectmode == SCE_SELECT_FACE) || (data.dist < *r_dist)) { /* only faces, no dist check */
|
||||
*r_dist = data.dist;
|
||||
@@ -617,12 +617,12 @@ BMFace *EDBM_face_find_nearest(ViewContext *vc, float *r_dist)
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
|
||||
|
||||
data.pass = 0;
|
||||
mesh_foreachScreenFace(vc, findnearestface__doClosest, &data);
|
||||
mesh_foreachScreenFace(vc, findnearestface__doClosest, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
|
||||
if (data.dist > 3.0f) {
|
||||
data.pass = 1;
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
|
||||
mesh_foreachScreenFace(vc, findnearestface__doClosest, &data);
|
||||
mesh_foreachScreenFace(vc, findnearestface__doClosest, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
}
|
||||
|
||||
*r_dist = data.dist;
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
#include "DNA_object_types.h"
|
||||
|
||||
#include "BLI_utildefines.h"
|
||||
#include "BLI_blenlib.h"
|
||||
#include "BLI_listbase.h"
|
||||
#include "BLI_rect.h"
|
||||
|
||||
#include "BKE_armature.h"
|
||||
#include "BKE_curve.h"
|
||||
@@ -51,7 +52,7 @@ typedef struct foreachScreenVert_userData {
|
||||
void (*func)(void *userData, BMVert *eve, const float screen_co_b[2], int index);
|
||||
void *userData;
|
||||
ViewContext vc;
|
||||
eV3DClipTest clipVerts;
|
||||
eV3DProjTest clip_flag;
|
||||
} foreachScreenVert_userData;
|
||||
|
||||
/* user data structures for derived mesh callbacks */
|
||||
@@ -60,13 +61,14 @@ typedef struct foreachScreenEdge_userData {
|
||||
void *userData;
|
||||
ViewContext vc;
|
||||
rctf win_rect; /* copy of: vc.ar->winx/winy, use for faster tests, minx/y will always be 0 */
|
||||
eV3DClipTest clipVerts;
|
||||
eV3DProjTest clip_flag;
|
||||
} foreachScreenEdge_userData;
|
||||
|
||||
typedef struct foreachScreenFace_userData {
|
||||
void (*func)(void *userData, BMFace *efa, const float screen_co_b[2], int index);
|
||||
void *userData;
|
||||
ViewContext vc;
|
||||
eV3DProjTest clip_flag;
|
||||
} foreachScreenFace_userData;
|
||||
|
||||
|
||||
@@ -84,12 +86,9 @@ static void mesh_foreachScreenVert__mapFunc(void *userData, int index, const flo
|
||||
BMVert *eve = EDBM_vert_at_index(data->vc.em, index);
|
||||
|
||||
if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
|
||||
const eV3DProjTest flag = (data->clipVerts == V3D_CLIP_TEST_OFF) ?
|
||||
V3D_PROJ_TEST_NOP :
|
||||
V3D_PROJ_RET_CLIP_BB | V3D_PROJ_RET_CLIP_WIN;
|
||||
float screen_co[2];
|
||||
|
||||
if (ED_view3d_project_float_object(data->vc.ar, co, screen_co, flag) != V3D_PROJ_RET_OK) {
|
||||
if (ED_view3d_project_float_object(data->vc.ar, co, screen_co, data->clip_flag) != V3D_PROJ_RET_OK) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -100,7 +99,7 @@ static void mesh_foreachScreenVert__mapFunc(void *userData, int index, const flo
|
||||
void mesh_foreachScreenVert(
|
||||
ViewContext *vc,
|
||||
void (*func)(void *userData, BMVert *eve, const float screen_co[2], int index),
|
||||
void *userData, eV3DClipTest clipVerts)
|
||||
void *userData, eV3DProjTest clip_flag)
|
||||
{
|
||||
foreachScreenVert_userData data;
|
||||
DerivedMesh *dm = editbmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
|
||||
@@ -108,10 +107,11 @@ void mesh_foreachScreenVert(
|
||||
data.vc = *vc;
|
||||
data.func = func;
|
||||
data.userData = userData;
|
||||
data.clipVerts = clipVerts;
|
||||
data.clip_flag = clip_flag;
|
||||
|
||||
if (clipVerts != V3D_CLIP_TEST_OFF)
|
||||
if (clip_flag & V3D_PROJ_TEST_CLIP_BB) {
|
||||
ED_view3d_clipping_local(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups */
|
||||
}
|
||||
|
||||
EDBM_index_arrays_init(vc->em, 1, 0, 0);
|
||||
dm->foreachMappedVert(dm, mesh_foreachScreenVert__mapFunc, &data);
|
||||
@@ -131,25 +131,16 @@ static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, const flo
|
||||
float screen_co_a[2];
|
||||
float screen_co_b[2];
|
||||
|
||||
const eV3DProjTest flag = (data->clipVerts == V3D_CLIP_TEST_RV3D_CLIPPING) ?
|
||||
V3D_PROJ_TEST_CLIP_BB | V3D_PROJ_TEST_CLIP_WIN :
|
||||
V3D_PROJ_TEST_NOP;
|
||||
|
||||
if (ED_view3d_project_float_object(data->vc.ar, v0co, screen_co_a, flag) != V3D_PROJ_RET_OK) {
|
||||
if (ED_view3d_project_float_object(data->vc.ar, v0co, screen_co_a, data->clip_flag) != V3D_PROJ_RET_OK) {
|
||||
return;
|
||||
}
|
||||
if (ED_view3d_project_float_object(data->vc.ar, v1co, screen_co_b, flag) != V3D_PROJ_RET_OK) {
|
||||
if (ED_view3d_project_float_object(data->vc.ar, v1co, screen_co_b, data->clip_flag) != V3D_PROJ_RET_OK) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (data->clipVerts == V3D_CLIP_TEST_RV3D_CLIPPING) {
|
||||
/* pass */
|
||||
}
|
||||
else {
|
||||
if (data->clipVerts == V3D_CLIP_TEST_REGION) {
|
||||
if (!BLI_rctf_isect_segment(&data->win_rect, screen_co_a, screen_co_b)) {
|
||||
return;
|
||||
}
|
||||
if (data->clip_flag & V3D_PROJ_TEST_CLIP_WIN) {
|
||||
if (!BLI_rctf_isect_segment(&data->win_rect, screen_co_a, screen_co_b)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -160,7 +151,7 @@ static void mesh_foreachScreenEdge__mapFunc(void *userData, int index, const flo
|
||||
void mesh_foreachScreenEdge(
|
||||
ViewContext *vc,
|
||||
void (*func)(void *userData, BMEdge *eed, const float screen_co_a[2], const float screen_co_b[2], int index),
|
||||
void *userData, eV3DClipTest clipVerts)
|
||||
void *userData, eV3DProjTest clip_flag)
|
||||
{
|
||||
foreachScreenEdge_userData data;
|
||||
DerivedMesh *dm = editbmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
|
||||
@@ -174,10 +165,11 @@ void mesh_foreachScreenEdge(
|
||||
|
||||
data.func = func;
|
||||
data.userData = userData;
|
||||
data.clipVerts = clipVerts;
|
||||
data.clip_flag = clip_flag;
|
||||
|
||||
if (clipVerts != V3D_CLIP_TEST_OFF)
|
||||
if (clip_flag & V3D_PROJ_TEST_CLIP_BB) {
|
||||
ED_view3d_clipping_local(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups */
|
||||
}
|
||||
|
||||
EDBM_index_arrays_init(vc->em, 0, 1, 0);
|
||||
dm->foreachMappedEdge(dm, mesh_foreachScreenEdge__mapFunc, &data);
|
||||
@@ -195,8 +187,7 @@ static void mesh_foreachScreenFace__mapFunc(void *userData, int index, const flo
|
||||
|
||||
if (efa && !BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
|
||||
float screen_co[2];
|
||||
if (ED_view3d_project_float_object(data->vc.ar, cent, screen_co,
|
||||
V3D_PROJ_TEST_CLIP_BB | V3D_PROJ_TEST_CLIP_WIN) == V3D_PROJ_RET_OK)
|
||||
if (ED_view3d_project_float_object(data->vc.ar, cent, screen_co, data->clip_flag) == V3D_PROJ_RET_OK)
|
||||
{
|
||||
data->func(data->userData, efa, screen_co, index);
|
||||
}
|
||||
@@ -206,7 +197,7 @@ static void mesh_foreachScreenFace__mapFunc(void *userData, int index, const flo
|
||||
void mesh_foreachScreenFace(
|
||||
ViewContext *vc,
|
||||
void (*func)(void *userData, BMFace *efa, const float screen_co_b[2], int index),
|
||||
void *userData)
|
||||
void *userData, const eV3DProjTest clip_flag)
|
||||
{
|
||||
foreachScreenFace_userData data;
|
||||
DerivedMesh *dm = editbmesh_get_derived_cage(vc->scene, vc->obedit, vc->em, CD_MASK_BAREMESH);
|
||||
@@ -214,6 +205,7 @@ void mesh_foreachScreenFace(
|
||||
data.vc = *vc;
|
||||
data.func = func;
|
||||
data.userData = userData;
|
||||
data.clip_flag = clip_flag;
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
|
||||
|
||||
@@ -229,14 +221,16 @@ void mesh_foreachScreenFace(
|
||||
void nurbs_foreachScreenVert(
|
||||
ViewContext *vc,
|
||||
void (*func)(void *userData, Nurb *nu, BPoint *bp, BezTriple *bezt, int beztindex, const float screen_co_b[2]),
|
||||
void *userData)
|
||||
void *userData, const eV3DProjTest clip_flag)
|
||||
{
|
||||
Curve *cu = vc->obedit->data;
|
||||
Nurb *nu;
|
||||
int i;
|
||||
ListBase *nurbs = BKE_curve_editNurbs_get(cu);
|
||||
|
||||
ED_view3d_clipping_local(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups */
|
||||
if (clip_flag & V3D_PROJ_TEST_CLIP_BB) {
|
||||
ED_view3d_clipping_local(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups */
|
||||
}
|
||||
|
||||
for (nu = nurbs->first; nu; nu = nu->next) {
|
||||
if (nu->type == CU_BEZIER) {
|
||||
@@ -296,15 +290,14 @@ void nurbs_foreachScreenVert(
|
||||
void mball_foreachScreenElem(
|
||||
struct ViewContext *vc,
|
||||
void (*func)(void *userData, struct MetaElem *ml, const float screen_co_b[2]),
|
||||
void *userData)
|
||||
void *userData, const eV3DProjTest clip_flag)
|
||||
{
|
||||
MetaBall *mb = (MetaBall *)vc->obedit->data;
|
||||
MetaElem *ml;
|
||||
|
||||
for (ml = mb->editelems->first; ml; ml = ml->next) {
|
||||
float screen_co[2];
|
||||
if (ED_view3d_project_float_object(vc->ar, &ml->x, screen_co,
|
||||
V3D_PROJ_TEST_CLIP_BB | V3D_PROJ_TEST_CLIP_WIN) == V3D_PROJ_RET_OK)
|
||||
if (ED_view3d_project_float_object(vc->ar, &ml->x, screen_co, clip_flag) == V3D_PROJ_RET_OK)
|
||||
{
|
||||
func(userData, ml, screen_co);
|
||||
}
|
||||
@@ -313,7 +306,10 @@ void mball_foreachScreenElem(
|
||||
|
||||
/* ------------------------------------------------------------------------ */
|
||||
|
||||
void lattice_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, BPoint *bp, const float screen_co[2]), void *userData)
|
||||
void lattice_foreachScreenVert(
|
||||
ViewContext *vc,
|
||||
void (*func)(void *userData, BPoint *bp, const float screen_co[2]),
|
||||
void *userData, const eV3DProjTest clip_flag)
|
||||
{
|
||||
Object *obedit = vc->obedit;
|
||||
Lattice *lt = obedit->data;
|
||||
@@ -322,14 +318,14 @@ void lattice_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, BPo
|
||||
float *co = dl ? dl->verts : NULL;
|
||||
int i, N = lt->editlatt->latt->pntsu * lt->editlatt->latt->pntsv * lt->editlatt->latt->pntsw;
|
||||
|
||||
ED_view3d_clipping_local(vc->rv3d, obedit->obmat); /* for local clipping lookups */
|
||||
if (clip_flag & V3D_PROJ_TEST_CLIP_BB) {
|
||||
ED_view3d_clipping_local(vc->rv3d, obedit->obmat); /* for local clipping lookups */
|
||||
}
|
||||
|
||||
for (i = 0; i < N; i++, bp++, co += 3) {
|
||||
if (bp->hide == 0) {
|
||||
float screen_co[2];
|
||||
if (ED_view3d_project_float_object(vc->ar, dl ? co : bp->vec, screen_co,
|
||||
V3D_PROJ_RET_CLIP_BB | V3D_PROJ_RET_CLIP_WIN) == V3D_PROJ_RET_OK)
|
||||
{
|
||||
if (ED_view3d_project_float_object(vc->ar, dl ? co : bp->vec, screen_co, clip_flag) == V3D_PROJ_RET_OK) {
|
||||
func(userData, bp, screen_co);
|
||||
}
|
||||
}
|
||||
@@ -342,7 +338,7 @@ void lattice_foreachScreenVert(ViewContext *vc, void (*func)(void *userData, BPo
|
||||
void armature_foreachScreenBone(
|
||||
struct ViewContext *vc,
|
||||
void (*func)(void *userData, struct EditBone *ebone, const float screen_co_a[2], const float screen_co_b[2]),
|
||||
void *userData)
|
||||
void *userData, const eV3DProjTest clip_flag)
|
||||
{
|
||||
bArmature *arm = vc->obedit->data;
|
||||
EditBone *ebone;
|
||||
@@ -353,9 +349,7 @@ void armature_foreachScreenBone(
|
||||
int points_proj_tot = 0;
|
||||
|
||||
/* project head location to screenspace */
|
||||
if (ED_view3d_project_float_object(vc->ar, ebone->head, screen_co_a,
|
||||
V3D_PROJ_TEST_CLIP_BB | V3D_PROJ_TEST_CLIP_WIN) == V3D_PROJ_RET_OK)
|
||||
{
|
||||
if (ED_view3d_project_float_object(vc->ar, ebone->head, screen_co_a, clip_flag) == V3D_PROJ_RET_OK) {
|
||||
points_proj_tot++;
|
||||
}
|
||||
else {
|
||||
@@ -364,9 +358,7 @@ void armature_foreachScreenBone(
|
||||
}
|
||||
|
||||
/* project tail location to screenspace */
|
||||
if (ED_view3d_project_float_object(vc->ar, ebone->tail, screen_co_b,
|
||||
V3D_PROJ_TEST_CLIP_BB | V3D_PROJ_TEST_CLIP_WIN) == V3D_PROJ_RET_OK)
|
||||
{
|
||||
if (ED_view3d_project_float_object(vc->ar, ebone->tail, screen_co_b, clip_flag) == V3D_PROJ_RET_OK) {
|
||||
points_proj_tot++;
|
||||
}
|
||||
else {
|
||||
@@ -388,7 +380,7 @@ void armature_foreachScreenBone(
|
||||
void pose_foreachScreenBone(
|
||||
struct ViewContext *vc,
|
||||
void (*func)(void *userData, struct bPoseChannel *pchan, const float screen_co_a[2], const float screen_co_b[2]),
|
||||
void *userData)
|
||||
void *userData, const eV3DProjTest clip_flag)
|
||||
{
|
||||
bArmature *arm = vc->obact->data;
|
||||
bPose *pose = vc->obact->pose;
|
||||
@@ -400,9 +392,7 @@ void pose_foreachScreenBone(
|
||||
int points_proj_tot = 0;
|
||||
|
||||
/* project head location to screenspace */
|
||||
if (ED_view3d_project_float_object(vc->ar, pchan->pose_head, screen_co_a,
|
||||
V3D_PROJ_TEST_CLIP_BB | V3D_PROJ_TEST_CLIP_WIN) == V3D_PROJ_RET_OK)
|
||||
{
|
||||
if (ED_view3d_project_float_object(vc->ar, pchan->pose_head, screen_co_a, clip_flag) == V3D_PROJ_RET_OK) {
|
||||
points_proj_tot++;
|
||||
}
|
||||
else {
|
||||
@@ -411,9 +401,7 @@ void pose_foreachScreenBone(
|
||||
}
|
||||
|
||||
/* project tail location to screenspace */
|
||||
if (ED_view3d_project_float_object(vc->ar, pchan->pose_tail, screen_co_b,
|
||||
V3D_PROJ_TEST_CLIP_BB | V3D_PROJ_TEST_CLIP_WIN) == V3D_PROJ_RET_OK)
|
||||
{
|
||||
if (ED_view3d_project_float_object(vc->ar, pchan->pose_tail, screen_co_b, clip_flag) == V3D_PROJ_RET_OK) {
|
||||
points_proj_tot++;
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -330,7 +330,7 @@ static BPoint *findnearestLattvert(ViewContext *vc, const int mval[2], int sel)
|
||||
data.mval_fl[1] = mval[1];
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
|
||||
lattice_foreachScreenVert(vc, findnearestLattvert__doClosest, &data);
|
||||
lattice_foreachScreenVert(vc, findnearestLattvert__doClosest, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
|
||||
return data.bp;
|
||||
}
|
||||
|
||||
@@ -398,6 +398,7 @@ static void do_lasso_select_pose__doSelectBone(void *userData, struct bPoseChann
|
||||
}
|
||||
static void do_lasso_select_pose(ViewContext *vc, Object *ob, const int mcords[][2], short moves, short select)
|
||||
{
|
||||
ViewContext vc_tmp;
|
||||
LassoSelectUserData data;
|
||||
rcti rect;
|
||||
|
||||
@@ -405,13 +406,16 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, const int mcords[]
|
||||
return;
|
||||
}
|
||||
|
||||
vc_tmp = *vc;
|
||||
vc_tmp.obact = ob;
|
||||
|
||||
BLI_lasso_boundbox(&rect, mcords, moves);
|
||||
|
||||
view3d_userdata_lassoselect_init(&data, vc, &rect, mcords, moves, select);
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obact, vc->rv3d);
|
||||
|
||||
pose_foreachScreenBone(vc, do_lasso_select_pose__doSelectBone, &data);
|
||||
pose_foreachScreenBone(&vc_tmp, do_lasso_select_pose__doSelectBone, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
|
||||
if (data.is_change) {
|
||||
bArmature *arm = ob->data;
|
||||
@@ -531,17 +535,17 @@ static void do_lasso_select_mesh(ViewContext *vc, const int mcords[][2], short m
|
||||
edbm_backbuf_check_and_select_verts(vc->em, select);
|
||||
}
|
||||
else {
|
||||
mesh_foreachScreenVert(vc, do_lasso_select_mesh__doSelectVert, &data, V3D_CLIP_TEST_RV3D_CLIPPING);
|
||||
mesh_foreachScreenVert(vc, do_lasso_select_mesh__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
}
|
||||
}
|
||||
if (ts->selectmode & SCE_SELECT_EDGE) {
|
||||
/* Does both bbsel and non-bbsel versions (need screen cos for both) */
|
||||
data.pass = 0;
|
||||
mesh_foreachScreenEdge(vc, do_lasso_select_mesh__doSelectEdge, &data, V3D_CLIP_TEST_OFF);
|
||||
mesh_foreachScreenEdge(vc, do_lasso_select_mesh__doSelectEdge, &data, V3D_PROJ_TEST_NOP);
|
||||
|
||||
if (data.is_done == 0) {
|
||||
data.pass = 1;
|
||||
mesh_foreachScreenEdge(vc, do_lasso_select_mesh__doSelectEdge, &data, V3D_CLIP_TEST_OFF);
|
||||
mesh_foreachScreenEdge(vc, do_lasso_select_mesh__doSelectEdge, &data, V3D_PROJ_TEST_NOP);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -550,7 +554,7 @@ static void do_lasso_select_mesh(ViewContext *vc, const int mcords[][2], short m
|
||||
edbm_backbuf_check_and_select_faces(vc->em, select);
|
||||
}
|
||||
else {
|
||||
mesh_foreachScreenFace(vc, do_lasso_select_mesh__doSelectFace, &data);
|
||||
mesh_foreachScreenFace(vc, do_lasso_select_mesh__doSelectFace, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -604,7 +608,7 @@ static void do_lasso_select_curve(ViewContext *vc, const int mcords[][2], short
|
||||
CU_deselect_all(vc->obedit);
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
|
||||
nurbs_foreachScreenVert(vc, do_lasso_select_curve__doSelect, &data);
|
||||
nurbs_foreachScreenVert(vc, do_lasso_select_curve__doSelect, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
}
|
||||
|
||||
static void do_lasso_select_lattice__doSelect(void *userData, BPoint *bp, const float screen_co[2])
|
||||
@@ -629,7 +633,7 @@ static void do_lasso_select_lattice(ViewContext *vc, const int mcords[][2], shor
|
||||
ED_setflagsLatt(vc->obedit, 0);
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
|
||||
lattice_foreachScreenVert(vc, do_lasso_select_lattice__doSelect, &data);
|
||||
lattice_foreachScreenVert(vc, do_lasso_select_lattice__doSelect, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
}
|
||||
|
||||
static void do_lasso_select_armature__doSelectBone(void *userData, struct EditBone *ebone, const float screen_co_a[2], const float screen_co_b[2])
|
||||
@@ -697,7 +701,7 @@ static void do_lasso_select_armature(ViewContext *vc, const int mcords[][2], sho
|
||||
if (extend == 0 && select)
|
||||
ED_armature_deselect_all_visible(vc->obedit);
|
||||
|
||||
armature_foreachScreenBone(vc, do_lasso_select_armature__doSelectBone, &data);
|
||||
armature_foreachScreenBone(vc, do_lasso_select_armature__doSelectBone, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
|
||||
if (data.is_change) {
|
||||
bArmature *arm = vc->obedit->data;
|
||||
@@ -734,7 +738,7 @@ static void do_lasso_select_meta(ViewContext *vc, const int mcords[][2], short m
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
|
||||
|
||||
mball_foreachScreenElem(vc, do_lasso_select_mball__doSelectElem, &data);
|
||||
mball_foreachScreenElem(vc, do_lasso_select_mball__doSelectElem, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
}
|
||||
|
||||
static int do_paintvert_box_select(ViewContext *vc, rcti *rect, int select, int extend)
|
||||
@@ -1707,7 +1711,7 @@ static int do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int exte
|
||||
CU_deselect_all(vc->obedit);
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
|
||||
nurbs_foreachScreenVert(vc, do_nurbs_box_select__doSelect, &data);
|
||||
nurbs_foreachScreenVert(vc, do_nurbs_box_select__doSelect, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@@ -1730,7 +1734,7 @@ static int do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int ex
|
||||
ED_setflagsLatt(vc->obedit, 0);
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
|
||||
lattice_foreachScreenVert(vc, do_lattice_box_select__doSelect, &data);
|
||||
lattice_foreachScreenVert(vc, do_lattice_box_select__doSelect, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@@ -1791,18 +1795,18 @@ static int do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int exten
|
||||
edbm_backbuf_check_and_select_verts(vc->em, select);
|
||||
}
|
||||
else {
|
||||
mesh_foreachScreenVert(vc, do_mesh_box_select__doSelectVert, &data, V3D_CLIP_TEST_RV3D_CLIPPING);
|
||||
mesh_foreachScreenVert(vc, do_mesh_box_select__doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
}
|
||||
}
|
||||
if (ts->selectmode & SCE_SELECT_EDGE) {
|
||||
/* Does both bbsel and non-bbsel versions (need screen cos for both) */
|
||||
|
||||
data.pass = 0;
|
||||
mesh_foreachScreenEdge(vc, do_mesh_box_select__doSelectEdge, &data, V3D_CLIP_TEST_OFF);
|
||||
mesh_foreachScreenEdge(vc, do_mesh_box_select__doSelectEdge, &data, V3D_PROJ_TEST_NOP);
|
||||
|
||||
if (data.is_done == 0) {
|
||||
data.pass = 1;
|
||||
mesh_foreachScreenEdge(vc, do_mesh_box_select__doSelectEdge, &data, V3D_CLIP_TEST_OFF);
|
||||
mesh_foreachScreenEdge(vc, do_mesh_box_select__doSelectEdge, &data, V3D_PROJ_TEST_NOP);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1811,7 +1815,7 @@ static int do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int exten
|
||||
edbm_backbuf_check_and_select_faces(vc->em, select);
|
||||
}
|
||||
else {
|
||||
mesh_foreachScreenFace(vc, do_mesh_box_select__doSelectFace, &data);
|
||||
mesh_foreachScreenFace(vc, do_mesh_box_select__doSelectFace, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2321,7 +2325,7 @@ static void mesh_circle_select(ViewContext *vc, int select, const int mval[2], f
|
||||
edbm_backbuf_check_and_select_verts(vc->em, select == LEFTMOUSE);
|
||||
}
|
||||
else {
|
||||
mesh_foreachScreenVert(vc, mesh_circle_doSelectVert, &data, V3D_CLIP_TEST_RV3D_CLIPPING);
|
||||
mesh_foreachScreenVert(vc, mesh_circle_doSelectVert, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2330,7 +2334,7 @@ static void mesh_circle_select(ViewContext *vc, int select, const int mval[2], f
|
||||
edbm_backbuf_check_and_select_edges(vc->em, select == LEFTMOUSE);
|
||||
}
|
||||
else {
|
||||
mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, V3D_CLIP_TEST_OFF);
|
||||
mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, V3D_PROJ_TEST_NOP);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2339,7 +2343,7 @@ static void mesh_circle_select(ViewContext *vc, int select, const int mval[2], f
|
||||
edbm_backbuf_check_and_select_faces(vc->em, select == LEFTMOUSE);
|
||||
}
|
||||
else {
|
||||
mesh_foreachScreenFace(vc, mesh_circle_doSelectFace, &data);
|
||||
mesh_foreachScreenFace(vc, mesh_circle_doSelectFace, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2422,7 +2426,7 @@ static void nurbscurve_circle_select(ViewContext *vc, int select, const int mval
|
||||
view3d_userdata_circleselect_init(&data, vc, select, mval, rad);
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
|
||||
nurbs_foreachScreenVert(vc, nurbscurve_circle_doSelect, &data);
|
||||
nurbs_foreachScreenVert(vc, nurbscurve_circle_doSelect, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
}
|
||||
|
||||
|
||||
@@ -2441,7 +2445,7 @@ static void lattice_circle_select(ViewContext *vc, int select, const int mval[2]
|
||||
view3d_userdata_circleselect_init(&data, vc, select, mval, rad);
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
|
||||
lattice_foreachScreenVert(vc, latticecurve_circle_doSelect, &data);
|
||||
lattice_foreachScreenVert(vc, latticecurve_circle_doSelect, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
}
|
||||
|
||||
|
||||
@@ -2510,7 +2514,7 @@ static void pose_circle_select(ViewContext *vc, int select, const int mval[2], f
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obact, vc->rv3d); /* for foreach's screen/vert projection */
|
||||
|
||||
pose_foreachScreenBone(vc, do_circle_select_pose__doSelectBone, &data);
|
||||
pose_foreachScreenBone(vc, do_circle_select_pose__doSelectBone, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
|
||||
if (data.is_change) {
|
||||
bArmature *arm = vc->obact->data;
|
||||
@@ -2597,7 +2601,7 @@ static void armature_circle_select(ViewContext *vc, int select, const int mval[2
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
|
||||
|
||||
armature_foreachScreenBone(vc, do_circle_select_armature__doSelectBone, &data);
|
||||
armature_foreachScreenBone(vc, do_circle_select_armature__doSelectBone, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
|
||||
if (data.is_change) {
|
||||
ED_armature_sync_selection(arm->edbo);
|
||||
@@ -2624,7 +2628,7 @@ static void mball_circle_select(ViewContext *vc, int select, const int mval[2],
|
||||
|
||||
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
|
||||
|
||||
mball_foreachScreenElem(vc, do_circle_select_mball__doSelectElem, &data);
|
||||
mball_foreachScreenElem(vc, do_circle_select_mball__doSelectElem, &data, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
}
|
||||
|
||||
/** Callbacks for circle selection in Editmode */
|
||||
|
||||
@@ -860,8 +860,7 @@ void ED_view3d_project_float_v3_m4(ARegion *ar, const float vec[3], float r_co[3
|
||||
|
||||
eV3DProjStatus ED_view3d_project_base(struct ARegion *ar, struct Base *base)
|
||||
{
|
||||
eV3DProjStatus ret = ED_view3d_project_short_global(ar, base->object->obmat[3], &base->sx,
|
||||
V3D_PROJ_TEST_CLIP_BB | V3D_PROJ_TEST_CLIP_WIN);
|
||||
eV3DProjStatus ret = ED_view3d_project_short_global(ar, base->object->obmat[3], &base->sx, V3D_PROJ_TEST_CLIP_DEFAULT);
|
||||
|
||||
if (ret != V3D_PROJ_RET_OK) {
|
||||
base->sx = IS_CLIPPED;
|
||||
@@ -912,10 +911,13 @@ int ED_view3d_boundbox_clip(RegionView3D *rv3d, float obmat[][4], BoundBox *bb)
|
||||
*/
|
||||
static eV3DProjStatus ed_view3d_project__internal(ARegion *ar,
|
||||
float perspmat[4][4], const int is_local, /* normally hidden */
|
||||
const float co[3], float r_co[2], eV3DProjTest flag)
|
||||
const float co[3], float r_co[2], const eV3DProjTest flag)
|
||||
{
|
||||
float fx, fy, vec4[4];
|
||||
|
||||
/* check for bad flags */
|
||||
BLI_assert((flag & V3D_PROJ_TEST_ALL) == flag);
|
||||
|
||||
if (flag & V3D_PROJ_TEST_CLIP_BB) {
|
||||
RegionView3D *rv3d = ar->regiondata;
|
||||
if (rv3d->rflag & RV3D_CLIPPING) {
|
||||
@@ -953,7 +955,7 @@ static eV3DProjStatus ed_view3d_project__internal(ARegion *ar,
|
||||
}
|
||||
|
||||
eV3DProjStatus ED_view3d_project_short_ex(ARegion *ar, float perspmat[4][4], const int is_local,
|
||||
const float co[3], short r_co[2], eV3DProjTest flag)
|
||||
const float co[3], short r_co[2], const eV3DProjTest flag)
|
||||
{
|
||||
float tvec[2];
|
||||
eV3DProjStatus ret = ed_view3d_project__internal(ar, perspmat, is_local, co, tvec, flag);
|
||||
@@ -972,7 +974,7 @@ eV3DProjStatus ED_view3d_project_short_ex(ARegion *ar, float perspmat[4][4], con
|
||||
}
|
||||
|
||||
eV3DProjStatus ED_view3d_project_int_ex(ARegion *ar, float perspmat[4][4], const int is_local,
|
||||
const float co[3], int r_co[2], eV3DProjTest flag)
|
||||
const float co[3], int r_co[2], const eV3DProjTest flag)
|
||||
{
|
||||
float tvec[2];
|
||||
eV3DProjStatus ret = ed_view3d_project__internal(ar, perspmat, is_local, co, tvec, flag);
|
||||
@@ -991,7 +993,7 @@ eV3DProjStatus ED_view3d_project_int_ex(ARegion *ar, float perspmat[4][4], const
|
||||
}
|
||||
|
||||
eV3DProjStatus ED_view3d_project_float_ex(ARegion *ar, float perspmat[4][4], const int is_local,
|
||||
const float co[3], float r_co[2], eV3DProjTest flag)
|
||||
const float co[3], float r_co[2], const eV3DProjTest flag)
|
||||
{
|
||||
float tvec[2];
|
||||
eV3DProjStatus ret = ed_view3d_project__internal(ar, perspmat, is_local, co, tvec, flag);
|
||||
@@ -1009,39 +1011,39 @@ eV3DProjStatus ED_view3d_project_float_ex(ARegion *ar, float perspmat[4][4], con
|
||||
}
|
||||
|
||||
/* --- short --- */
|
||||
eV3DProjStatus ED_view3d_project_short_global(ARegion *ar, const float co[3], short r_co[2], eV3DProjTest flag)
|
||||
eV3DProjStatus ED_view3d_project_short_global(ARegion *ar, const float co[3], short r_co[2], const eV3DProjTest flag)
|
||||
{
|
||||
RegionView3D *rv3d = ar->regiondata;
|
||||
return ED_view3d_project_short_ex(ar, rv3d->persmat, FALSE, co, r_co, flag);
|
||||
}
|
||||
/* object space, use ED_view3d_init_mats_rv3d before calling */
|
||||
eV3DProjStatus ED_view3d_project_short_object(ARegion *ar, const float co[3], short r_co[2], eV3DProjTest flag)
|
||||
eV3DProjStatus ED_view3d_project_short_object(ARegion *ar, const float co[3], short r_co[2], const eV3DProjTest flag)
|
||||
{
|
||||
RegionView3D *rv3d = ar->regiondata;
|
||||
return ED_view3d_project_short_ex(ar, rv3d->persmatob, TRUE, co, r_co, flag);
|
||||
}
|
||||
|
||||
/* --- int --- */
|
||||
eV3DProjStatus ED_view3d_project_int_global(ARegion *ar, const float co[3], int r_co[2], eV3DProjTest flag)
|
||||
eV3DProjStatus ED_view3d_project_int_global(ARegion *ar, const float co[3], int r_co[2], const eV3DProjTest flag)
|
||||
{
|
||||
RegionView3D *rv3d = ar->regiondata;
|
||||
return ED_view3d_project_int_ex(ar, rv3d->persmat, FALSE, co, r_co, flag);
|
||||
}
|
||||
/* object space, use ED_view3d_init_mats_rv3d before calling */
|
||||
eV3DProjStatus ED_view3d_project_int_object(ARegion *ar, const float co[3], int r_co[2], eV3DProjTest flag)
|
||||
eV3DProjStatus ED_view3d_project_int_object(ARegion *ar, const float co[3], int r_co[2], const eV3DProjTest flag)
|
||||
{
|
||||
RegionView3D *rv3d = ar->regiondata;
|
||||
return ED_view3d_project_int_ex(ar, rv3d->persmatob, TRUE, co, r_co, flag);
|
||||
}
|
||||
|
||||
/* --- float --- */
|
||||
eV3DProjStatus ED_view3d_project_float_global(ARegion *ar, const float co[3], float r_co[2], eV3DProjTest flag)
|
||||
eV3DProjStatus ED_view3d_project_float_global(ARegion *ar, const float co[3], float r_co[2], const eV3DProjTest flag)
|
||||
{
|
||||
RegionView3D *rv3d = ar->regiondata;
|
||||
return ED_view3d_project_float_ex(ar, rv3d->persmat, FALSE, co, r_co, flag);
|
||||
}
|
||||
/* object space, use ED_view3d_init_mats_rv3d before calling */
|
||||
eV3DProjStatus ED_view3d_project_float_object(ARegion *ar, const float co[3], float r_co[2], eV3DProjTest flag)
|
||||
eV3DProjStatus ED_view3d_project_float_object(ARegion *ar, const float co[3], float r_co[2], const eV3DProjTest flag)
|
||||
{
|
||||
RegionView3D *rv3d = ar->regiondata;
|
||||
return ED_view3d_project_float_ex(ar, rv3d->persmatob, TRUE, co, r_co, flag);
|
||||
|
||||
Reference in New Issue
Block a user