rna api function scene.ray_cast now returns the object and its matrix (incase its a dupli).
This commit is contained in:
@@ -1517,7 +1517,8 @@ static bool snapDerivedMesh(short snap_mode, ARegion *ar, Object *ob, DerivedMes
|
||||
return retval;
|
||||
}
|
||||
|
||||
static bool snapObject(Scene *scene, short snap_mode, ARegion *ar, Object *ob, int editobject, float obmat[4][4],
|
||||
static bool snapObject(Scene *scene, short snap_mode, ARegion *ar, Object *ob, float obmat[4][4], bool use_obedit,
|
||||
Object **r_ob, float r_obmat[4][4],
|
||||
const float ray_start[3], const float ray_normal[3], const float mval[2],
|
||||
float r_loc[3], float r_no[3], float *r_dist_px, float *r_depth)
|
||||
{
|
||||
@@ -1527,7 +1528,7 @@ static bool snapObject(Scene *scene, short snap_mode, ARegion *ar, Object *ob, i
|
||||
BMEditMesh *em;
|
||||
DerivedMesh *dm;
|
||||
|
||||
if (editobject) {
|
||||
if (use_obedit) {
|
||||
em = BKE_editmesh_from_object(ob);
|
||||
dm = editbmesh_get_derived_cage(scene, ob, em, CD_MASK_BAREMESH);
|
||||
}
|
||||
@@ -1544,10 +1545,18 @@ static bool snapObject(Scene *scene, short snap_mode, ARegion *ar, Object *ob, i
|
||||
retval = snapArmature(snap_mode, ar, ob, ob->data, obmat, ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, r_depth);
|
||||
}
|
||||
|
||||
if (retval) {
|
||||
if (r_ob) {
|
||||
*r_ob = ob;
|
||||
copy_m4_m4(r_obmat, obmat);
|
||||
}
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
static bool snapObjectsRay(Scene *scene, short snap_mode, Base *base_act, View3D *v3d, ARegion *ar, Object *obedit,
|
||||
Object **r_ob, float r_obmat[4][4],
|
||||
const float ray_start[3], const float ray_normal[3], float *r_ray_dist,
|
||||
const float mval[2], float *r_dist_px, float r_loc[3], float r_no[3], SnapMode mode)
|
||||
{
|
||||
@@ -1557,7 +1566,9 @@ static bool snapObjectsRay(Scene *scene, short snap_mode, Base *base_act, View3D
|
||||
if (mode == SNAP_ALL && obedit) {
|
||||
Object *ob = obedit;
|
||||
|
||||
retval |= snapObject(scene, snap_mode, ar, ob, 1, ob->obmat, ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, r_ray_dist);
|
||||
retval |= snapObject(scene, snap_mode, ar, ob, ob->obmat, true,
|
||||
r_ob, r_obmat,
|
||||
ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, r_ray_dist);
|
||||
}
|
||||
|
||||
/* Need an exception for particle edit because the base is flagged with BA_HAS_RECALC_DATA
|
||||
@@ -1568,7 +1579,9 @@ static bool snapObjectsRay(Scene *scene, short snap_mode, Base *base_act, View3D
|
||||
base = base_act;
|
||||
if (base && base->object && base->object->mode & OB_MODE_PARTICLE_EDIT) {
|
||||
Object *ob = base->object;
|
||||
retval |= snapObject(scene, snap_mode, ar, ob, 0, ob->obmat, ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, r_ray_dist);
|
||||
retval |= snapObject(scene, snap_mode, ar, ob, ob->obmat, false,
|
||||
r_ob, r_obmat,
|
||||
ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, r_ray_dist);
|
||||
}
|
||||
|
||||
for (base = FIRSTBASE; base != NULL; base = base->next) {
|
||||
@@ -1585,15 +1598,17 @@ static bool snapObjectsRay(Scene *scene, short snap_mode, Base *base_act, View3D
|
||||
ListBase *lb = object_duplilist(scene, ob, FALSE);
|
||||
|
||||
for (dupli_ob = lb->first; dupli_ob; dupli_ob = dupli_ob->next) {
|
||||
Object *dob = dupli_ob->ob;
|
||||
|
||||
retval |= snapObject(scene, snap_mode, ar, dob, 0, dupli_ob->mat, ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, r_ray_dist);
|
||||
retval |= snapObject(scene, snap_mode, ar, dupli_ob->ob, dupli_ob->mat, false,
|
||||
r_ob, r_obmat,
|
||||
ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, r_ray_dist);
|
||||
}
|
||||
|
||||
free_object_duplilist(lb);
|
||||
}
|
||||
|
||||
retval |= snapObject(scene, snap_mode, ar, ob, 0, ob->obmat, ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, r_ray_dist);
|
||||
retval |= snapObject(scene, snap_mode, ar, ob, ob->obmat, false,
|
||||
r_ob, r_obmat,
|
||||
ray_start, ray_normal, mval, r_loc, r_no, r_dist_px, r_ray_dist);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1610,6 +1625,7 @@ static bool snapObjects(Scene *scene, short snap_mode, Base *base_act, View3D *v
|
||||
}
|
||||
|
||||
return snapObjectsRay(scene, snap_mode, base_act, v3d, ar, obedit,
|
||||
NULL, NULL,
|
||||
ray_start, ray_normal, &ray_dist,
|
||||
mval, r_dist_px, r_loc, r_no, mode);
|
||||
}
|
||||
@@ -1625,8 +1641,10 @@ bool snapObjectsContext(bContext *C, const float mval[2], float *r_dist_px, floa
|
||||
ScrArea *sa = CTX_wm_area(C);
|
||||
View3D *v3d = sa->spacedata.first;
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ARegion *ar = CTX_wm_region(C);
|
||||
Object *obedit = CTX_data_edit_object(C);
|
||||
|
||||
return snapObjects(scene, scene->toolsettings->snap_mode, scene->basact, v3d, CTX_wm_region(C), CTX_data_edit_object(C), mval, r_dist_px, r_loc, r_no, mode);
|
||||
return snapObjects(scene, scene->toolsettings->snap_mode, scene->basact, v3d, ar, obedit, mval, r_dist_px, r_loc, r_no, mode);
|
||||
}
|
||||
|
||||
bool snapObjectsEx(Scene *scene, Base *base_act, View3D *v3d, ARegion *ar, Object *obedit, short snap_mode,
|
||||
@@ -1636,10 +1654,12 @@ bool snapObjectsEx(Scene *scene, Base *base_act, View3D *v3d, ARegion *ar, Objec
|
||||
mval, r_dist_px, r_loc, r_no, mode);
|
||||
}
|
||||
bool snapObjectsRayEx(Scene *scene, Base *base_act, View3D *v3d, ARegion *ar, Object *obedit, short snap_mode,
|
||||
Object **r_ob, float r_obmat[4][4],
|
||||
const float ray_start[3], const float ray_normal[3], float *r_ray_dist,
|
||||
const float mval[2], float *r_dist_px, float r_loc[3], float r_no[3], SnapMode mode)
|
||||
{
|
||||
return snapObjectsRay(scene, snap_mode, base_act, v3d, ar, obedit,
|
||||
r_ob, r_obmat,
|
||||
ray_start, ray_normal, r_ray_dist,
|
||||
mval, r_dist_px, r_loc, r_no, mode);
|
||||
}
|
||||
@@ -1889,10 +1909,13 @@ bool peelObjectsTransForm(TransInfo *t, ListBase *depth_peels, const float mval[
|
||||
|
||||
bool peelObjectsContext(bContext *C, ListBase *depth_peels, const float mval[2], SnapMode mode)
|
||||
{
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ScrArea *sa = CTX_wm_area(C);
|
||||
View3D *v3d = sa->spacedata.first;
|
||||
ARegion *ar = CTX_wm_region(C);
|
||||
Object *obedit = CTX_data_edit_object(C);
|
||||
|
||||
return peelObjects(CTX_data_scene(C), v3d, CTX_wm_region(C), CTX_data_edit_object(C), depth_peels, mval, mode);
|
||||
return peelObjects(scene, v3d, ar, obedit, depth_peels, mval, mode);
|
||||
}
|
||||
|
||||
/******************** NODES ***********************************/
|
||||
@@ -1999,7 +2022,8 @@ bool snapNodesTransform(TransInfo *t, const int mval[2], float *r_dist_px, float
|
||||
bool snapNodesContext(bContext *C, const int mval[2], float *r_dist_px, float r_loc[2], char *r_node_border, SnapMode mode)
|
||||
{
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
return snapNodes(scene->toolsettings, CTX_wm_space_node(C), CTX_wm_region(C), mval, r_dist_px, r_loc, r_node_border, mode);
|
||||
ARegion *ar = CTX_wm_region(C);
|
||||
return snapNodes(scene->toolsettings, CTX_wm_space_node(C), ar, mval, r_dist_px, r_loc, r_node_border, mode);
|
||||
}
|
||||
|
||||
/*================================================================*/
|
||||
|
||||
Reference in New Issue
Block a user